从界面更新属性

本文关键字:属性 更新 界面 | 更新日期: 2023-09-27 18:36:06

我有一个带有属性的接口:

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的值更改时都会更新?

从界面更新属性

您不一定需要新字段 - 您只需将另一个属性添加到 ViewModel 即可重新公开组合接口属性:

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

编辑,重新引发属性更改事件

我建议您要求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;
}