低级别对象上的DependencyProperty / INotifyPropertyChanged

时间:2011-10-14 00:35:52

标签: c# .net wpf user-interface mvvm

我有一些相当低级别的类在我正在使用的WPF应用程序中使用。例如,一个对象将在ScrollViewer中显示为列表并与DataTemplate一起显示。绑定对于UI中使用的几个属性非常有用,我完全使用这个对象,因为它只是方便传递给UI。问题是UI没有得到数据更改的通知,因为它没有实现INotifyPropertyChanged或DependencyProperty。

所提到的类本打算成为可以完全独立于UI使用的库的一部分,所以我担心用特定于UI的东西使它变得混乱(特别是对于INPC,这是一个疯狂的代码量)为了这么小的事情。)

在这种情况下通常会做什么,用UI cruft混乱低级别类或者为UI创建一个包装类。或者还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

为了实现良好的分离,我将创建一个包装库类的类。包装器将实现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));
    }
}

或者,您可以从Internal类派生并添加接口和触发事件的额外属性。但我希望自己完全分离。