Я использую шаблон MVVM в своем многопоточном приложении WPF.
Теперь в модели, которую я имею (я пропустил очевидную реализацию интерфейса INotifyPropertyChanged, чтобы сделать его более понятным):
public class ShallowModel : INotifyPropertyChanged
{
private string _dbState;
public string DbState
{
get { return _dbState; }
set
{
_dbState = value;
OnPropertyChanged("DbState") // ofc there is implementation of this
}
}
private InsideObject _inObject;
public InsideObject InObject
{
get { return _inObject; }
set
{
_inObject = value;
OnPropertyChanged("InObject")
}
}
}
public class InsideModel : INotifyPropertyChanged
{
private string _actState;
public string ActState
{
get { return _actState; }
set
{
_actState= value;
OnPropertyChanged("ActState")
}
}
}
Скажем, у меня есть TextBlocks в представлении:
<TextBlock Text={Binding ActObjectState}/>
<TextBlock Text={Binding DbState}/>
Теперь есть часть проблемного ViewModel:
public class ViewModel : INotifyPropertyChanged
{
private ShallowModel _model;
public string ActObjectState
{
get
{
if(_model.InObject != null)
return _model.InObject.ActState;
else
return null;
}
}
public string DbState
{
get
{
return _model.DbState;
}
}
}
Проблема в том, что ActObjectState и DbState не обновляются, когда фоновый поток обновляет свойства ShallowModel и / или InsideModel.Мои вопросы:
Должен ли я добавить открытое свойство Model в ViewModel и связать представление, как {Binding Path = Model.DbState} ?Я думаю, что это нарушает идею MVVM - представление не должно знать о модели.
InObject в ShallowModel создается новым потоком после нажатия кнопки пользователя на пользовательском интерфейсе.Поэтому, когда ViewModel создан, InObject равен нулю.Каким-то образом - после того, как он создан потоком - ActObjectState не обновляется.Как заставить это работать?Сделать привязку как {Binding Path = Model.InObject.ActState}?Это подразумевает необходимость обладать знаниями о Model от дизайнера пользовательского интерфейса.
Спасибо за мой английский