Я использую шаблон 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;
}
}
}
Проблема в том, что ActObjectSta te и DbState не обновляются, когда фоновый поток обновляет свойства ShallowModel и/или InsideModel. Мои вопросы:
Должен ли я добавить модель общественной собственности на ViewModel и связывания зрения как {Binding Path = Model.DbState}? Я думаю, что это нарушает идею MVVM - View не должен знать о модели.
InObject in ShallowModel создан новым путем после нажатия кнопки Пользовательский интерфейс. Поэтому при создании ViewModel InObject имеет значение NULL. Как-то - после того, как он создан потоком - ActObjectState не обновляется. Как заставить его работать? Сделать привязку, например {Binding Path = Model.InObject.ActState}? Это подразумевает необходимость получения знаний о модели дизайнером пользовательского интерфейса.
Thx, СРЮ для моего английского
Это должно, безусловно, поможет вам [наследовать INotifyPropertyChanged] [1] [1]: http://stackoverflow.com/ вопросы/6871952/silverlight-checkbox-results –
Я не уверен, что вы на самом деле имеете в виду. Внедрен весь интерфейс INotifyPropertyChanged. Если он также используется в ViewModel, даже если эти свойства не заданы ViewModel, а Model - оба из них заданы в результате действия фонового потока. – Joe
Вы показываете неправильный код. Ваша проблема заключается в обновлении пользовательского интерфейса со связанными свойствами, но вы не показываете реализацию INotifyPropertyChanged. Вы говорите, что фоновый поток обновляет эти свойства, но вы не показываете код для него. –