2012-02-01 85 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

相關問題