【发布时间】:2015-01-22 18:45:56
【问题描述】:
我一直在努力将我的应用程序迁移到 MVVM。 我正在尝试通过 MVVM 从一些数据中绑定许多文本框。
型号:
public class XMLItems
{
string input;
public string Input
{
get { return input; }
set { input = value; }
}
}
视图模型
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";
}
...在我的模型中,它不更新文本?
我似乎找不到其他类似的例子?我是不是搞错了?
【问题讨论】:
-
如果您希望模型中的属性更改能够通过,您需要让您的模型对象实现 INotifyPropertyChanged 并订阅您的视图模型中的这些更改,然后通过在您的视图模型中引发适当的 OnPropertyChanged 来传播。跨度>
-
检查绑定模式。 {绑定路径=输入,模式=TwoWay}