2012-02-01 90 views
0

使用以下代码段来绑定文本框上的属性。在UI中更改文本框值被修改时,属性值得到刷新。但是我将该值赋给了代码后面的文本框[txtNoOfSessions.Text =“1”],但它并未反映属性中的值。如何从后面的C#代码更新WPF绑定的值?

<TextBox x:Name="txtNoOfSessions" 
      Text="{Binding Path=NoOfSessions,Mode=TwoWay}" 
      Height="23" Width="120" /> 

回答

2

的问题是,结合当控制失去默认集中只更新属性值。

试试这个:

<TextBox 
    Name="txtNoOfSessionstxtNoOfSessions" 
    Text="{Binding Path=NoOfSessions, UpdateSourceTrigger=PropertyChanged}" 
    Height="23" 
    Width="120" /> 

设置UpdateSourceTriggerPropertyChanged,将使txtNoOfSessions.Text = "1"工作就好了。

谢谢, Alex。

+0

它解决了。谢谢 – VIJAY 2012-02-01 16:44:37

0

txtNoOfSession.Text被绑定。设置绑定属性的值。这是在您的视图模型中设置NoOfSessions。

NoOfSessions = 1

1

一般我尽量不从UI后面的代码数据绑定更新值,但是如果我必须我使用UI对象的DataContext并更新绑定属性。

在您的例子,它会是这个样子:

MyDataObject obj = txtNoOfSessions.DataContext as MyDataObject; 
if (obj != null) 
    obj.NoOfSessions = "New Value"; 
2

使用INotifyPropertyChanged的的财产。否则,在UI加载后它不会更新。

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

实施例:

public string PhoneNumber 
{ 
    get 
    { 
     return this.phoneNumberValue; 
    } 

    set 
    { 
     if (value != this.phoneNumberValue) 
     { 
      this.phoneNumberValue = value; 
      NotifyPropertyChanged("PhoneNumber"); 
     } 
    } 
} 
+0

这应该是被接受的答案。在化身为肥胖猫和爆米花! – Sharky 2015-09-01 07:44:18

0

Rachel是正确的,你不能直接在控件上更新绑定值而不覆盖绑定本身。

您可以使用上面的或((dynamic)this.DataContext).NoOfSession = "New Value";是我该怎么做的。

这样,代码将在不知道视图模型类型的情况下工作。视图模型甚至可以是ExpandoObject而不是类,它仍然可以工作。

请注意ExpandoObject databinding在Windows应用商店应用程序中被破坏。

https://connect.microsoft.com/VisualStudio/feedback/details/836252/databinding-in-windows-store-apps-to-an-expandoobject-change-notification-not-working

相关问题