WPF-绑定问题

WPF-绑定问题,wpf,binding,Wpf,Binding,为什么单击按钮后文本块中的文本不会更改 XAML: 您将MyPerson设置为new person 这是有意的吗?Person类是否实现了INotifyPropertyChanged事件 您仅在更新MyPerson的属性DataContext仍然有对使用以下行创建的对象的引用: MyPerson = new Person { Name = "A" }; 在构造函数中。您还需要更新DataContext 相反,请使用以下代码: private void Button_Click(object s

为什么单击按钮后文本块中的文本不会更改

XAML:

您将
MyPerson
设置为new person

这是有意的吗?
Person
类是否实现了
INotifyPropertyChanged
事件

您仅在更新MyPerson的属性
DataContext
仍然有对使用以下行创建的对象的引用:

MyPerson = new Person { Name = "A" };
在构造函数中。您还需要更新
DataContext

相反,请使用以下代码:

private void Button_Click(object sender, RoutedEventArgs e)
{
    MyPerson = new Person { Name = "B" };
}
private void Button_Click(object sender, RoutedEventArgs e)
{
    MyPerson = new Person { Name = "B" };
    DataContext = MyPerson;
}    

您需要在Person类上实现INotifyPropertyChanged,然后只要更改MyPerson的名称即可提高PropertyChanged,如果您希望它更干净的话

或者,您可以将新创建的对象重新应用到DataContext,否则它将无法工作

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



由于您绑定到Name,因此当您更改MyPerson时,不会对Name触发NotifyPropertyChanged,并且视图不会更新。

在单击时更改datacontext不会影响性能吗?他不应该使用相同的数据上下文对象吗。可以将其作为类成员,并在Person类上实现INotifyPropertyChanged,以通知“Name”成员的更改。然后,不要说MyPerson=newperson{Name=“B”};如果假设Person对象的类成员是mPerson,那么就说,mPerson.Name=“B”。我在回答中确实提到了这一点。但OP并没有对此作出回应。我仍然建议亲自实现
INotifyPropertyChanged
,并更改其
Name
属性,而不是创建一个全新的
person
对象。谢谢!请澄清
MyPerson = new Person { Name = "A" };
private void Button_Click(object sender, RoutedEventArgs e)
{
    MyPerson = new Person { Name = "B" };
    DataContext = MyPerson;
}    
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding MyPerson, Path=Name}"/>