2017-02-12 35 views
0

我得到異常:C#:AmbiguousMatchException:曖昧找到匹配

AmbiguousMatchException:曖昧找到匹配

打開我的窗口和XAML被解析的時候。我有一個基礎的ViewModel類。它有一個DataGrid

public class BaseViewModel<T> : ViewModel, INotifyPropertyChanged where T : MyClass 
{ 
    protected T _selectedItem; 
    public T SelectedItem 
    { 
     get 
     { 
      return _selectedItem; 
     } 
     set 
     { 
      _selectedItem = value; 
      OnPropertyChanged(); 
     } 
    } 
} 

的SelectedItem屬性的屬性在我繼承的ViewModel我重寫產生異常

public new MyInheritedClass SelectedItem 
{ 
    get 
    { 
     return _selectedItem; 
    } 
    set 
    { 
     _selectedItem = value; 
     OnPropertyChanged(); 
     //Do other stuff 
    } 
} 

那麼如何使用overrided財產,並沒有得到一個異常的財產?

回答

1

你爲什麼要重新定義派生類中的屬性?派生類的類型參數應該指定屬性的類型:

public class MyInheritedClass : BaseViewModel<MyClass> 
{ 
    //no need to define a new SelectedItem property... 
} 

在上面的示例代碼MyInheritedClass已有MyClass類型的SelectedItem屬性。它已經在基類中定義了。你不需要創建一個新的。

如果屬性需要做一些事情在派生類特殊的,你應該在基類中定義的屬性作爲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 
    } 
} 
+0

因爲我需要爲那個繼承的類做些特別的事情。查看新屬性 –

+0

中的註釋然後,您應該使基類中的屬性變爲虛擬,並在派生類中重寫它。看到我編輯的答案。 – mm8