Я сделал программу, которая выполняет некоторые расчеты, для которых я хочу создать графический интерфейс с использованием WPF и MVVM. Я не уверен, как связать внутренние переменные моих приложений со свойствами модели, на которые будет реагировать представление. Я имею в виду, что если мое приложение работает с внутренней переменной n, всякий раз, когда она изменяет значение, для того, чтобы изменение отражалось в представлении, я также должен вручную обновлять правильность модели.

Как лучше всего интегрировать мое приложение в MVVM?

Вот мой текущий код (упрощенный):

class ApplicationModel : INotifyPropertyChanged
{
    #region Members
    private int number;
    #endregion

    public ApplicationModel()
    {
        new Thread(() => applicationWork(this)).Start();
    }

    private void applicationWork(ApplicationModel appModel)
    {            
        // internal variables
        int n = 0

        // simulating my app running, changing variables
        while (true)
        { 
            Thread.Sleep(1000);
            n++;
            appModel.number++;
            // how do I tie the two together?            
        }        
    }

    #region Properties
    public int Number
    {
        get
        {
            return number;
        }
        set
        {
            number = value;
            OnPropertyChanged("Number");
        }
    }
    #endregion

    #region INotifyPropertyChanged Members  
    public event PropertyChangedEventHandler? PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
        // ...
    }
    #endregion
}
0
StefanoN 30 Май 2023 в 18:57

1 ответ

Если я правильно понимаю ваш вопрос, appModel.number++; изменяет приватную резервную переменную, которая не будет обновлять установщик для Number, и поэтому событие PropertyChanged не будет вызываться. Я считаю хорошей практикой всегда изменять открытый член.

Похоже, вы можете выполнить некоторую консолидацию переменных (n всегда совпадает с Number? Почему бы просто не изменить Number?), чтобы навести порядок.

0
gusmally supports Monica 30 Май 2023 в 19:31
Вы правильно понимаете. Я разработал свое приложение отдельно, полагаясь только на CMD для обратной связи, поэтому теперь я хочу создать для него графический интерфейс. Изменение всех внутренних переменных для свойств модели, как вы предлагаете, будет работать, я просто недоволен, как это обычно делается в MVVM, например. используя свойства модели в качестве переменных вашего приложения.
 – 
StefanoN
30 Май 2023 в 19:35
1
В MVVM у вас обычно есть ViewModel. Модель хранит данные любым способом, удобным для модели, View требует определенного форматирования для привязки, ViewModel является тем переводчиком между ними. Модель может быть любой формы, которую вы хотите, если вы хотите использовать приложение в качестве модели, это не является ошибкой, но обычно ваше приложение не будет действовать как ViewModel, как вы сделали здесь. Модель не должна заботиться о том, что делает представление, именно эти слабосвязанные отношения делают MVVM таким мощным.
 – 
Tarazed
30 Май 2023 в 19:38