WPF-绑定问题
为什么单击按钮后文本块中的文本不会更改 XAML: 您将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
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}"/>