我得到异常(exception):
当打开我的窗口时,XAML被解析。我有一个基本的ViewModel类。它具有DataGrid的SelectedItem属性的属性
public class BaseViewModel<T> : ViewModel, INotifyPropertyChanged where T : MyClass
{
protected T _selectedItem;
public T SelectedItem
{
get
{
return _selectedItem;
}
set
{
_selectedItem = value;
OnPropertyChanged();
}
}
}
在继承的ViewModel中,我重写了会产生异常的属性
public new MyInheritedClass SelectedItem
{
get
{
return _selectedItem;
}
set
{
_selectedItem = value;
OnPropertyChanged();
//Do other stuff
}
}
那么如何使用重写的属性而不获取异常呢?
最佳答案
为什么要在派生类中重新定义属性?派生类的type参数应指定属性的类型:
public class MyInheritedClass : BaseViewModel<MyClass>
{
//no need to define a new SelectedItem property...
}
在上面的示例代码中,
MyInheritedClass
已经具有SelectedItem
类型的MyClass
属性。它已经在基类中定义。您不需要创建一个新的。如果属性需要在派生类中做一些特殊的事情,则应在基类中将属性定义为
virtual
:public virtual T SelectedItem
{
get
{
return _selectedItem;
}
set
{
_selectedItem = value;
OnPropertyChanged();
}
}
...并在派生类中覆盖它:
public override MyClass SelectedItem
{
get
{
return _selectedItem;
}
set
{
_selectedItem = value;
OnPropertyChanged();
//Do other stuff
}
}
关于c# - C#:AmbiguousMatchException:发现模糊匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42188340/