如何更改绑定对象?

时间:2013-10-27 22:51:12

标签: c# wpf binding

我正在创建一个使用绑定的应用程序来推广TextBlock文本
这是我的网格

<Grid Name="ClientGird">
    <TextBlock Text="{Binding Name}"/>
</Grid>

在后面的代码中我有一个Client对象实例并将其设置为this.DataContext

MainWindow : Window
{
    public Client client { get; set; }
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = client;
    }
}

当我更改client Name属性的值时,它将显示在窗口中

public MainWindow()
{
    InitializeComponent();
    this.DataContext = client;
    client.Name = "John";
}

所以,但是当我尝试更改client的对象时,窗口没有显示新的上下文,为什么会发生这种情况?

public MainWindow()
{
    InitializeComponent();
    this.DataContext = client;
    client = myOtherClientObject;
}

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

你需要这样做:

this.DataContext = myOtherClientObject;

您的代码client = myOtherClientObject;不会更改DataContext所引用的内容,但仍会引用“旧”client值。

以下是C#中引用类型的一些reminder(来自msdn):

  

值类型的变量存储数据,以及那些存储数据的变量   引用类型存储对实际数据的引用。参考类型   也被称为对象。

您的client变量是引用类型,因此client仅引用数据(它不是数据)而DataContext引用相同的内容(感谢DataContext = client;) 。当您更改client变量引用的数据时(使用client = myOtherClientObject;),它不会影响DataContext及其引用的数据。

答案 1 :(得分:1)

您的Client类是否实现

  

INotifyPropertyChanged

接口。这将在ViewModel或ViceVersa中发生更改时通知您的视图。

答案 2 :(得分:1)

尝试改变这个概念:

 this.DataContext = client;
 this.DataContext = null;
 this.DataContext = myOtherClientObject;