TextBox.Text绑定到ViewModel的属性

TextBox.Text绑定到ViewModel的属性

问题描述:

我有一个将TextBox内容绑定到另一个类中的属性的两种方法的问题。搜索stackoverflow给了很多技巧/解决方案,但似乎没有工作。TextBox.Text绑定到ViewModel的属性

在我的XAML代码我有:

< TextBox ... Width="336" IsReadOnly="True" 
Text="{Binding Path=AssignedClearProgram, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 

(...我删除了所有非重要的项目)

在老毛病CS代码,我有:

public CombiWindow(Combi combi) 
{ 
    ViewModel = new CombiViewModel(combi); 
    DataContext = ViewModel; 
} 

在CombiViewModel:

[UsedImplicitly] 
    public string AssignedClearProgram { get; set; } 

看起来,我第一次分配AssignedClearProgram时,文本框中填充了我设置的文本,但是在显示窗口并从代码更新AssignedClearProgram(即,设置方法被调用),数据不会在屏幕上更新。

有没有人有解决方案来更新此变量时更改文本框?

亲切的问候,

米歇尔

+0

为什么绑定模式twoway?我原以为没有从视图中输入...... – pgee70 2015-10-01 11:36:12

+0

也许一种方式绑定也可以(但对于回答问题无关紧要)。 – 2015-10-03 11:35:09

你的视图模型类需要实现INotifyPropertyChanged的,你需要,只要你改变的财产,以提高该接口的事件。然后绑定会发现更改并更新文本框。

+0

谢谢,我忘了告诉我已经使用INotifyPropertyChanged,但我忘记了在set方法中添加OnPropertyChanged调用。非常感谢你! – 2012-07-21 22:06:41

+1

最好的办法就是放入物业二传手,并检查提价之前实际发生的价值变化。 – BlackWasp 2012-07-21 22:09:45

您的视图模型类应实现INotifyPropertyChanged接口。然后

你的财产将如下所示:

private string assignedClearProgram; 

public string AssignedClearProgram 
{ 
    get { return assignedClearProgram; } 
    set 
    { 
     if (assignedClearProgram != value) 
     { 
      assignedClearProgram = value; 

      // Notify property has changed here using PropertyChanged event from INotifyPropertyChanged. 
     } 
    } 
} 

阅读this文章中如何实现INotifyPropertyChanged接口,并利用其PropertyChanged事件的例子。

+0

谢谢,但我真的得到它的工作;顺便说一句,我真的需要显式调用OnPropertyChanged事件(不知道你是否在这里,而不是//Notify ...行,但为链接+1。 – 2012-07-21 22:10:43

+0

是的,我做了,我只是没有知道你将如何实施它,从而留下评论。 – Bernard 2012-07-21 22:12:15