0

这可能是一个有点愚蠢的问题,但我找不到任何解决方法或想到以下问题的任何解决方案......

  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 实现的类 Example 和具有 1 个属性 A 的 IExample 接口。

由于我使用的是显式接口实现,我不得不通过我的IExample 接口引用我的 A

这就是我的问题所在。由于A在值更改时显式来自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   

顺便说一句,请随意批评 INotifyPropertyChanged 实现。我觉得我可以重新实现这是一种可以处理显式继承的方法

谢谢大家。

[编辑] 更改了“显式继承与显式接口实现” - 就像 Daniel 纠正了我一样,添加了隐式继承代码。显然其中一个继承应该被注释掉......

4

1 回答 1

1

正如我在评论中所说,您在未向我们展示的代码中一定做错了什么。这里引发了事件:

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

http://ideone.com/jMpRG7

于 2013-03-22T08:18:33.213 回答