Общий подход, который вы здесь используете, неверен, когда вы создаете элементы View в вашей ViewModel. С MVVM вы все еще хотите создать свой пользовательский интерфейс (представление) в XAML. В вашем случае вы все равно создадите Grid
и Label
в вашем XAML в большинстве случаев. Подумайте, что вы делаете с этим подходом.
У вас есть модель данных, которая хранит свойства данных и уведомляет об изменениях. Думайте об этом как о структурной стороне данных.
public class MyModel : INotifyPropertyChanged
{
private string labelValue;
public string LabelValue
{
get { return labelValue; }
set
{
labelValue = value;
NotifyOfPropertyChange(() => LabelValue);
}
}
//Property changed handler logic below.
//I assume you have something based on your code.
}
Теперь мы создаем модель представления, которая работает с данными. Это то, к чему также привязано представление.
public class MyViewModel
{
//Add a property for the model you created
public MyModel NewModel {get;set;}
//Load the NewModel values when the view model is created.
public MyViewModel()
{
NewModel = new MyModel(){LabelValue="Hello World"};
}
}
Хорошо, поэтому у нас есть данные Model
, и у нас есть ViewModel
, чтобы фактически использовать Model
и заполнить его значениями. Теперь давайте создадим пользовательский интерфейс (View
) и свяжем его с ViewModel
.
. В вашем Window
вы создадите метку и просто привяжете желаемое свойство ViewModel
. В этом случае мы будем использовать свойство вашей модели LabelValue
.
<Grid>
<Label Content="{Binding NewModel.LabelValue}"/>
</Grid>
Теперь мы просто устанавливаем текст данных в коде пользовательского интерфейса
public MyViewModel myViewModel = new MyViewModel(); //Create the ViewModel
public MyWindow()
{
InitializeComponent();
//Set the DataContext to the ViewModel
DataContext = myViewModel;
}
Когда вы запускаете программу, содержимое метки должно быть таким, какое вы указали в свойстве ViewModel
MyModel.LabelValue
. Это всего лишь простое объяснение очень большой концепции, но оно должно дать вам представление о том, как она работает. Есть также много методов и стилей, которые используют люди MVVM, но это понятие MVVM в его самой основной форме c. Надеюсь, это даст вам идею и направит вас на правильный путь.
Цель состоит в том, чтобы запустить ваши логи c в вас ViewModel
, чтобы можно было построить View
s и Model
s. с минимальным кодом. Если вы правильно реализуете INotifyPropertyChanged
, все значения в вашем View
автоматически обновляются без дополнительного кода или блокировки потока пользовательского интерфейса. Хотя вначале концепция кажется громоздкой, в долгосрочной перспективе она экономит много времени и усилий.