0

Это может быть немного глупый вопрос, но я не мог найти обходные или думать о каких-либо решений следующей задачи ...C# Явная реализация интерфейса разбивает мое INotifyPropertyChanged

public class Example: IExample, INotifyPropertyChanged 
    { 
    public Example() 
    { 
    } 

    /// Does not works properly... 
    string fooString; 
    string IExample.A 
    { 
     get { return this.fooString; } 
     set 
     { 
      this.fooString= value; 
      onPropertyChange("A"); 
     } 
    } 

    /// Works just fine 
    string fooString; 
    public string A 
    { 
     get { return this.fooString; } 
     set 
     { 
      this.fooString= value; 
      onPropertyChange("A"); 
     } 
    } 

    PropertyChangedEventHandler propertyChangedHandler; 

    private void onPropertyChange(string propertyName) 
    { 
     if (this.propertyChangedHandler != null) 
      propertyChangedHandler(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged 
    { 
     add { this.propertyChangedHandler += value; } 
     remove { this.propertyChangedHandler -= value; } 
    } 

} 

Как вы можете видеть из кода у меня есть класс, который реализует пример из INotifyPropertyChanged и мой интерфейс IExample, который имеет 1 свойство А.

Поскольку я использую Явную реализацию интерфейса Я вынужден обратиться к моим через мой Интерфейс IExample

И вот где моя проблема. Поскольку исходит от IExamle Явного, когда значение изменяется INotifyPropertyChanged не увольняет ...

Который имеет смысл.

Любые мысли/идеи, как сохранить Явная реализация интерфейса и INotifyPropertyChanged и все еще выполняют работу?

Вы можете спросить, почему я одержу Явной реализации интерфейса

1) it's cool [I know horrible reason] 
2) its clarity and better code readability [mostly because of this] 
3) It forces you to use Interface 

Btw Не стесняйтесь критиковать INotifyPropertyChanged реализации. Я чувствую, что могу переделать это так, чтобы он мог обрабатывать Явное наследование

Спасибо вам все заблаговременно.

[Изменить] Изменено «явное наследование против явной реализации интерфейса» - Как Даниэль Исправил меня, Добавил код неявного наследования. Очевидно, одно из наследований должно быть прокомментировано ...

+4

Интерфейсы * реализованы * по классам, а не * унаследовали *. Таким образом, он называется * явной реализации интерфейса *, а не * явным наследованием *. Наконец, ваша проблема не имеет ничего общего с явной реализацией интерфейса. Если событие не поднято, это, скорее всего, связано с тем, что никто не подписался на него. Сказав это, на самом деле не совсем ясно, что ваша проблема здесь. Не вызвано ли это событие? Если да, то откуда вы знаете? Или проблема в том, что связанный элемент управления не обновляется? –

+0

BTW: Ваши причины использования явной реализации интерфейса кажутся странными. «1. Это круто» - вы уже заметили, что это не повод. «2. Это делает код более понятным и понятным» - как это сделать? «3. Это заставляет вас использовать интерфейс» - и почему вы хотите заставить меня использовать интерфейс? Бывают случаи, когда вы хотите это сделать, но это не общие случаи. –

+0

Что заставляет вас думать, что событие не уволено? –

ответ

1

Как я уже сказал в своем комментарии, вы должны делать что-то неправильно в коде, который вы нам не показывали. Здесь событие возникает:

var example = new Example(); 
((INotifyPropertyChanged)example).PropertyChanged += OnAChanged; 
((IExample)example).A = "new string"; 

см http://ideone.com/jMpRG7

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