将属性添加到库中的现有类

时间:2017-06-14 07:45:42

标签: c# wpf oop

我想在Microsoft.Exchange.WebServices.Data.Folder类中添加一个Property。 原因是,我需要一个bool Property" Selected"将它在WPF中绑定到一个复选框。

首先我认为我可以使用C#-Extensions,但目前无法编写属性扩展名。

然后我创建了自己的课程#34; MyFolder"所以我可以从Folder类转换到我的类。

它也不起作用。

public class MyFolder : Folder, INotifyPropertyChanged
{
    private bool selected;

    public bool Selected
    {
        get { return selected; }
        set { selected = value; OnPropertyChanged("Selected"); }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public MyFolder(ExchangeService service):base(service)
    {

    }

    protected void OnPropertyChanged(string name)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }
}

修改

我知道可以在MyFolder类中添加属性Folder。但我认为必须以优雅的方式实现。

public class MyFolder : INotifyPropertyChanged
{
    private bool selected;

    public bool Selected
    {
        get { return selected; }
        set { selected = value; OnPropertyChanged("Selected"); }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public Folder FolderObject { get; set; }

    public MyFolder(Folder FolderObject)
    {
        this.FolderObject = FolderObject;
    }

    protected void OnPropertyChanged(string name)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }
}

2 个答案:

答案 0 :(得分:2)

您不需要向现有类添加属性。 正如您在MVVM中一样,为什么不简单地实现表示该功能的视图模型。

例如:

class MyFolderViewModel : INotifyPropertyChanged
{
    public bool IsSelected { get; set; }

    private Folder folderObject;
}

答案 1 :(得分:1)

  

我想在Microsoft.Exchange.WebServices.Data.Folder类中添加一个属性。

这确实不可能,因为您没有自己定义此类,因此您无法更改其定义。向类添加属性需要您重新编译它。

  

然后我创建了自己的类“MyFolder”,这样我就可以从Folder类转换为我的类了。

您无法将Microsoft.Exchange.WebServices.Data.Folder对象转换为自定义类型的对象......这将无法正常工作。

你应该做的是创建自己的类,例如MyFolder,它包含您需要的Microsoft.Exchange.WebServices.Data.Folder类的任何功能。这基本上就是你已经做过的事情。没有更好的方法。

然后直接绑定到实现MyFolder接口的客户端感知类(INotifyPropertyChanged)的实例。这是一个很好的推荐方法。忘记向内置类添加属性并进行强制转换。