我得到异常(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/

10-12 02:57