使用以下代碼段來綁定文本框上的屬性。在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