我有ViewModel
继承自BindableBase
类,它是来自Prism的一个实现INotifyPropertyChanged
的类。
public class MyViewModel : BindableBase { }
我有一个使用SetProperty
方法的属性来通知UI任何更改。
private ClassA _sourceA;
public ClassA SourceA {
get { return _sourceA; }
set { SetProperty(ref _sourceA, value); }
}
该属性是来自代码后面的另一个source
对象的引用。
private void UpdateView(ClassA source) {
SourceA = source;// the source object does not implement INotifyPropertyChanged
}
当用户更改UI XAML
中的一个值时,其他一些值将在代码后面的source
对象中相应更改。
如何在source
(来自UpdateView方法)对象更新时更新UI?
答案 0 :(得分:0)
您可以使用DependencyProperty代替INotifyPropertyChanged。
DependencyProperty.Register("SourceA", typeof(ClassA), typeof(MainWindow));
答案 1 :(得分:0)
如何在源(来自UpdateView方法)对象更新时更新UI?
您需要为视图中绑定到目标属性的每个源属性引发视图模型的PropertyChanged
事件,即对于要在视图中更新的源对象的每个属性应该调用OnPropertyChanged
类的BindableBase
方法:
OnPropertyChanged("Property1");
OnPropertyChanged("Property2");
...
每当更改源对象的属性时,都需要执行此操作。这意味着源对象必须引发一个事件或某事来通知任何其他类。
答案 2 :(得分:0)
如果该模型位于其他地方并且您无法更改它(无法实现INPC),那么您可能应该制作一些模仿该模型的包装器模型,并在该包装器模型上实现INPC。这样你的UI就会更新。 也许这个链接会有所帮助 - What is a wrapper class?