如何在没有实现INotifyPropertyChanged的对象时更新绑定。 WPF

时间:2017-03-13 09:22:26

标签: c# wpf xaml prism inotifypropertychanged

我有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?

3 个答案:

答案 0 :(得分:0)

您可以使用DependencyProperty代替INotifyPropertyChanged。

DependencyProperty.Register("SourceA", typeof(ClassA), typeof(MainWindow));

Interwebz的一些例子

答案 1 :(得分:0)

  

如何在源(来自UpdateView方法)对象更新时更新UI?

您需要为视图中绑定到目标属性的每个源属性引发视图模型的PropertyChanged事件,即对于要在视图中更新的源对象的每个属性应该调用OnPropertyChanged类的BindableBase方法:

OnPropertyChanged("Property1");
OnPropertyChanged("Property2");

...

每当更改源对象的属性时,都需要执行此操作。这意味着源对象必须引发一个事件或某事来通知任何其他类。

答案 2 :(得分:0)

如果该模型位于其他地方并且您无法更改它(无法实现INPC),那么您可能应该制作一些模仿该模型的包装器模型,并在该包装器模型上实现INPC。这样你的UI就会更新。 也许这个链接会有所帮助 - What is a wrapper class?