如何从C#代码后面更新WPF绑定的值

本文关键字:WPF 更新 绑定 代码 | 更新日期: 2023-09-27 18:22:08

使用以下代码绑定textbox上的属性。属性值正在刷新,而文本框值在UI中进行了修改和更改。但我在[txtNoOfSessions.Text="1"]后面的代码中为textbox分配了值,但它没有反映属性中的值。

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

如何从C#代码后面更新WPF绑定的值

对属性使用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");
        }
    }
}

此答案需要更新或删除。

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

在您的示例中,它看起来像这样:

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

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

NoOfSessions=1

Rachel是对的,您不能在不覆盖绑定本身的情况下直接更新控件上的绑定值。

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

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

请注意,ExpandoObject数据绑定在Windows应用商店应用程序中已损坏。

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