2017-02-12 11 views
0

я получаю исключение:C#: AmbiguousMatchException: неоднозначный матч нашли

AmbiguousMatchException: неоднозначный матч нашли

при открытии моего окна и XAML получает разобран. У меня есть базовый класс ViewModel. Она имеет свойство для SelectedItem свойства DataGrid

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 
    } 
} 

Так как использовать перекрытую свойство и не получить исключение?

ответ

1

Почему вы переопределяете свойство в производном классе? Аргумент типа производного класса должен указать тип свойства:

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 
    } 
} 
+0

Потому что мне нужно сделать что-то особенное для этого унаследованного класса. Посмотрите на комментарий в новом свойстве –

+0

. Затем вы должны сделать свойство virtual в базовом классе и переопределить его в производном классе. См. Мой отредактированный ответ. – mm8

 Смежные вопросы

  • Нет связанных вопросов^_^