gpt4 book ai didi

c# - MVVM 模型到 ViewModel 的通信

转载 作者:太空狗 更新时间:2023-10-29 18:19:12 24 4
gpt4 key购买 nike

我有一个包含 View 、 View 模型和自定义类型类的简单场景。

模型类是这样的:

public class Person : Validation.DataError, INotifyPropertyChanged
{
#region INotifyProperty

public event PropertyChangedEventHandler PropertyChanged;

public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion


public global::System.String name
{
get
{
return _name;
}
set
{
_name= value;
RaisePropertyChanged("name");
}
}
private global::System.String _name;

在 ViewModel 中我有一个 Person 属性:

private Model.Person person;

public Model.Person Person
{
get
{
return person;
}
set
{
this.person= value;

this.RaisePropertyChanged("Person");
this.SavePersonCommand.OnCanExecuteChanged();
}
}

在我的 View 中,我有一个绑定(bind)到 Person.name 的文本框

所以 ViewModel 没有执行 set 方法,因为 Person 对象仍然是相同的...它正在执行 Model 属性中的 set 方法。

我想让用户更改人名并调用另一个方法(通过网络服务和其他东西搜索...),我认为这个功能应该在 ViewModel 中。

我正在使用 MVVM Light 工具包中的 Messenger 在不同 View 模型之间以及 View 和 View 模型之间进行通信。

现在我不知道我是否也应该为此使用调解器,或者我是否应该知道另一种方法来解决这个问题。

最佳答案

只需在您的 ViewModel 中订阅 Person 的 PropertyChanged 事件并检查“Name”属性,或任何您想做的事情:

Person.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Person_PropertyChanged);

void Person_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if(e.PropertyName == "Name")
{
//do something
}
}

关于c# - MVVM 模型到 ViewModel 的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5821956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com