C# 如何更改绑定对象?
我正在为popularizeC# 如何更改绑定对象?,c#,wpf,binding,C#,Wpf,Binding,我正在为popularizeTextBlockText 这是我的网格 <Grid Name="ClientGird"> <TextBlock Text="{Binding Name}"/> </Grid> 当我更改客户端名称属性的值时,它将显示在窗口中 public MainWindow() { InitializeComponent(); this.DataContext = client; client.Name = "J
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不是空的谢谢!我喜欢这个解决方案,它将帮助我解决问题!我喜欢这个解决方案,它将帮助我