C# 如何更改绑定对象?

C# 如何更改绑定对象?,c#,wpf,binding,C#,Wpf,Binding,我正在为popularizeTextBlockText 这是我的网格 <Grid Name="ClientGird"> <TextBlock Text="{Binding Name}"/> </Grid> 当我更改客户端名称属性的值时,它将显示在窗口中 public MainWindow() { InitializeComponent(); this.DataContext = client; client.Name = "J

我正在为popularize
TextBlock
Text
这是我的网格

<Grid Name="ClientGird">
    <TextBlock Text="{Binding Name}"/>
</Grid>
当我更改
客户端
名称
属性的值时,它将显示在窗口中

public MainWindow()
{
    InitializeComponent();
    this.DataContext = client;
    client.Name = "John";
}
所以,当我尝试更改
客户机的对象时,窗口不显示新上下文,为什么会发生这种情况

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

如何解决此问题?

您需要这样做:

this.DataContext = myOtherClientObject;
您的代码
client=myOtherClientObject
不要更改
DataContext
引用的内容,它仍在引用“旧的”
client

下面是一些引用类型在C#(来自msdn)中的工作方式:

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


您的
client
变量是引用类型,因此
client
仅引用数据(它不是数据),而
DataContext
引用相同的数据(由于
DataContext=client;
)。当您更改
客户端
变量引用的数据时(使用
客户端=myOtherClientObject;
),它不会影响
数据上下文及其引用的数据。

您需要这样做:

this.DataContext = myOtherClientObject;
您的代码
client=myOtherClientObject
不要更改
DataContext
引用的内容,它仍在引用“旧的”
client

下面是一些引用类型在C#(来自msdn)中的工作方式:

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


您的
client
变量是引用类型,因此
client
仅引用数据(它不是数据),而
DataContext
引用相同的数据(由于
DataContext=client;
)。当您更改
客户端
变量引用的数据时(使用
客户端=myOtherClientObject;
),它不会影响
数据上下文
及其引用的数据。

您的客户端类实现了什么


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

您的客户端类实现了什么


接口。当ViewModel或ViceVersa中的某些内容发生更改时,这将通知您的视图。

尝试更改此概念:

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

尝试改变这个概念:

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

这是可行的,但不可能仅解决此已更改的“客户端”对象?绑定是直接从DataContext引用对象获取上下文?是否要更改客户端变量(仅),因为您在同一类中的其他位置使用它?是的,我还想知道这是否可行。然后您应该创建一个新属性(能够通知视图请参见INotifyPropertyChanged接口或DependencyProperty)进入名为Client的MainWindow类。您将使用此属性分配当前客户端。若要绑定它,请将DataContext=this;并将textblock绑定到Client.Name。这是可行的,但无法仅解决此已更改的“Client”对象?绑定是从DataContext引用对象直接获取上下文?是否要更改r客户端变量(仅限),因为您正在同一类中的其他位置使用它?是的,我还想知道是否可能。然后您应该创建一个新属性(能够通知视图请参见INotifyPropertyChanged接口或DependencyProperty)在名为Client的主窗口类中。您可以使用此属性分配当前客户端。若要绑定它,请将DataContext=this;并将textblock绑定到Client.Name。除了下面的答案之外,您似乎没有实际初始化
客户端
,或者它没有显示但没有显示“myOtherClientObject”名称,但是myOtherClientObject不是空的除了下面的答案之外,它似乎没有显示您实际上正在初始化
客户端
,或者它没有显示它没有显示“myOtherClientObject”名称,但是myOtherClientObject不是空的谢谢!我喜欢这个解决方案,它将帮助我解决问题!我喜欢这个解决方案,它将帮助我