我有一个属性接口:
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
的值发生变化时都会更新?
答案 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;
}