从界面更新属性

时间:2015-01-03 12:02:41

标签: c#

我有一个属性接口:

public interface IMyInterface
    {

        string Test { get; set; }
    }

以下是实现它的类:

public MyClass : IMyInterface
{
        private string _test;
        public string Test
        {
            get { return _test; }
            set
            {
                _test = value;
                RaisePropertyChanged("Test");
            }
        }

    Public void MethodName()
    {
      //Logic that updates the value for Test
    }
}

到目前为止一切都很顺利,当调用该方法时,Test会更新。

我还有一个ViewModel,它在构造函数中采用IMyInterface的实现。

private IMyInterface _myInterface;

 public ViewModel(IMyInterface myinterface)
        {

            _myInterface = myinterface;

        }

我是否可以在ViewModel中拥有一个属性,每次Test的值发生变化时都会更新?

1 个答案:

答案 0 :(得分:1)

您不一定需要新字段 - 您可以做的只是向ViewModel添加另一个属性以重新公开您的组合接口属性:

public ViewModel
{
    // ...
    public string Test
    {
        get { return _myInterface.Test; }
        set {_myInterface.Test = value }
    }
}

编辑,重新提升PropertyChanged事件

我建议您要求IMyInterface扩展INotifyPropertyChanged

public interface IMyInterface : INotifyPropertyChanged
{
    string Test { get; set; }
}

然后由您的基础具体类实现,如下所示:

public class MyClass : IMyInterface
{
    private string _test;
    public string Test
    {
        get { return _test; }
        set
        {
            _test = value;
            RaisePropertyChanged("Test");
        }
    }

    private void RaisePropertyChanged(string propertyName)
    {
        // Null means no subscribers to the event
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}