我想在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));
}
}
答案 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
)的实例。这是一个很好的推荐方法。忘记向内置类添加属性并进行强制转换。