C# 对低级对象更改的DependencyProperty/InotifyProperty
我有一些相当低级的类,它们在我正在开发的WPF应用程序中使用。例如,一个表示将在ScrollViewer中显示为列表并使用DataTemplate显示的对象。绑定对于UI中使用的几个属性非常有用,我使用这个对象纯粹是因为它可以方便地传递到UI。问题是UI没有收到数据更改的通知,因为它没有实现INotifyPropertyChanged或DependencyProperty 提到的类是一个库的一部分,可以完全独立于UI使用,所以我担心它会被特定于UI的东西弄得乱七八糟(特别是对于INPC,对于这样一个小东西来说,这是一个疯狂的代码量)C# 对低级对象更改的DependencyProperty/InotifyProperty,c#,.net,wpf,user-interface,mvvm,C#,.net,Wpf,User Interface,Mvvm,我有一些相当低级的类,它们在我正在开发的WPF应用程序中使用。例如,一个表示将在ScrollViewer中显示为列表并使用DataTemplate显示的对象。绑定对于UI中使用的几个属性非常有用,我使用这个对象纯粹是因为它可以方便地传递到UI。问题是UI没有收到数据更改的通知,因为它没有实现INotifyPropertyChanged或DependencyProperty 提到的类是一个库的一部分,可以完全独立于UI使用,所以我担心它会被特定于UI的东西弄得乱七八糟(特别是对于INPC,对于这样
在这种情况下通常要做的是,用UI cruft将低级类弄乱,或者创建一个用于UI的包装器类。或者还有其他选择吗?为了实现良好的分离,我将创建一个类来包装库类。包装器将实现INotifyPropertyChanged接口,并公开在更新时触发PropertyChanged事件的公共属性。包装器将从包装的类中获取并设置实际值
public class Internal
{
public int MyProperty { get; set; }
}
public class WrapperForInternal : INotifyPropertyChanged
{
public event PropertyChanged(object sender, PropertyChangedEventArgs e);
private Internal _i;
public WrapperForInternal(Internal i)
{
_i = i;
}
public int MyProperty
{
get { return _i.MyProperty; }
set
{
_i.MyProperty = value;
RaisePropertyChanged("MyProperty");
}
}
protected void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
或者,您可以从内部类派生并添加触发事件的接口和额外属性。但我自己更喜欢完全分离。就个人而言,我可能会编写一个包装器,尽管我不知道这是否是最好的选择。问题的一部分是,由于在一些较低代码中运行工作线程,底层类中的值可能会更改。。。因此,我猜PropertyChanged事件在这种情况下不会被触发?在这种情况下,我建议您将内部属性MyProperty设置为虚拟,然后继承一个实现INotifyPropertyChanged的类。还重写MyProperty,以便在更新时触发更改事件。