gpt4 book ai didi

c# - MVVM 文本框绑定(bind),从模型更新数据

转载 作者:行者123 更新时间:2023-12-03 10:27:58 27 4
gpt4 key购买 nike

我一直在努力将我的应用程序迁移到 MVVM。
我正在尝试通过 MVVM 从一些数据中绑定(bind)许多文本框。

模型:

public class XMLItems 
{
string input;
public string Input
{
get { return input; }
set { input = value; }
}
}

View 模型
 public ViewModel() //Translates ICommands to methods
{
_ items = new XMLItems { Input = "" };
}

XMLItems _items;
public XMLItems Items
{
get
{
return _items;
}
set
{
_items = value;
}
}

public string Input
{
get { return Items.Input; }
set
{
if (Items.Input != value)
{
Items.Input = value;
OnPropertyChanged("Input");
}
}
}

public void ChangeInput(object obj)
{
Input = "123";
}

void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}

public event PropertyChangedEventHandler PropertyChanged;

所以一切正常。当 ChangeInput 函数被触发时,文本更新 123

但是我需要做的是从所有代码逻辑所在的模型中更新我的文本,这发生在我的应用程序中的几个地方(更新文本)。但这似乎不起作用。
例如,如果我开火:
public void ChangeText()
{
Input = "456";
}

...在我的模型中,它不会更新文本?

我似乎找不到其他类似的例子?我做错了吗?

最佳答案

@user469104 基本上是正确的。

如果您想将对象内部的更改传播到 UI,您需要实现该对象 INotifyPropertyChanged并提高 PropertyChanged在您关心的属性的 setter 中。

然而 ,如果 View/ViewModel 直接使用这个对象(就像你的一样),这将自动工作。您不需要捕获 PropertyChanged自己事件。

由于XmlItems实际上是一个 DTO,我会完全按照我的描述去做。您实际上并不需要单独的 ViewModel/Model 业务对象。

关于c# - MVVM 文本框绑定(bind),从模型更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096423/

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