使用以下代码段来绑定文本框上的属性。在UI中更改文本框值被修改时,属性值得到刷新。但是我将该值赋给了代码后面的文本框[txtNoOfSessions.Text =“1”],但它并未反映属性中的值。如何从后面的C#代码更新WPF绑定的值?
<TextBox x:Name="txtNoOfSessions"
Text="{Binding Path=NoOfSessions,Mode=TwoWay}"
Height="23" Width="120" />
使用以下代码段来绑定文本框上的属性。在UI中更改文本框值被修改时,属性值得到刷新。但是我将该值赋给了代码后面的文本框[txtNoOfSessions.Text =“1”],但它并未反映属性中的值。如何从后面的C#代码更新WPF绑定的值?
<TextBox x:Name="txtNoOfSessions"
Text="{Binding Path=NoOfSessions,Mode=TwoWay}"
Height="23" Width="120" />
的问题是,结合当控制失去默认集中只更新属性值。
试试这个:
<TextBox
Name="txtNoOfSessionstxtNoOfSessions"
Text="{Binding Path=NoOfSessions, UpdateSourceTrigger=PropertyChanged}"
Height="23"
Width="120" />
设置UpdateSourceTrigger
到PropertyChanged
,将使txtNoOfSessions.Text = "1"
工作就好了。
谢谢, Alex。
txtNoOfSession.Text被绑定。设置绑定属性的值。这是在您的视图模型中设置NoOfSessions。
NoOfSessions = 1
一般我尽量不从UI后面的代码数据绑定更新值,但是如果我必须我使用UI对象的DataContext
并更新绑定属性。
在您的例子,它会是这个样子:
MyDataObject obj = txtNoOfSessions.DataContext as MyDataObject;
if (obj != null)
obj.NoOfSessions = "New Value";
使用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");
}
}
}
这应该是被接受的答案。在化身为肥胖猫和爆米花! – Sharky 2015-09-01 07:44:18
Rachel是正确的,你不能直接在控件上更新绑定值而不覆盖绑定本身。
您可以使用上面的或((dynamic)this.DataContext).NoOfSession = "New Value";
是我该怎么做的。
这样,代码将在不知道视图模型类型的情况下工作。视图模型甚至可以是ExpandoObject
而不是类,它仍然可以工作。
请注意ExpandoObject
databinding在Windows应用商店应用程序中被破坏。
它解决了。谢谢 – VIJAY 2012-02-01 16:44:37