我正在创建一个使用绑定的应用程序来推广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;
}
我该如何解决这个问题?
答案 0 :(得分:3)
你需要这样做:
this.DataContext = myOtherClientObject;
您的代码client = myOtherClientObject;
不会更改DataContext
所引用的内容,但仍会引用“旧”client
值。
以下是C#中引用类型的一些reminder(来自msdn):
值类型的变量存储数据,以及那些存储数据的变量 引用类型存储对实际数据的引用。参考类型 也被称为对象。
您的client
变量是引用类型,因此client
仅引用数据(它不是数据)而DataContext
引用相同的内容(感谢DataContext = client;
) 。当您更改client
变量引用的数据时(使用client = myOtherClientObject;
),它不会影响DataContext
及其引用的数据。
答案 1 :(得分:1)
答案 2 :(得分:1)
尝试改变这个概念:
this.DataContext = client;
this.DataContext = null;
this.DataContext = myOtherClientObject;