从界面更新属性
本文关键字:属性 更新 界面 | 更新日期: 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;
}