绑定到多个窗口上的同一属性不起作用
本文关键字:属性 不起作用 窗口 绑定 | 更新日期: 2023-09-27 18:31:38
我在开发多窗口 wpf 应用程序时遇到了一个非常令人困惑的问题。
有两个窗口,MainWindow和SecondWindow。两者的代码都非常简单:主窗口:
<Button Content="Change Property to 5" Click="ChangeProperty" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" />
第二个窗口:
<Label Content="{Binding InstanceOfMyClass.value, NotifyOnSourceUpdated=True}"></Label>
第二个窗口后面的代码保持不变,第一个窗口后面的代码如下:
public partial class MainWindow : Window
{
SecondWindow w;
ViewModel vm;
public MainWindow()
{
InitializeComponent();
vm = new ViewModel() { InstanceOfMyClass = new MyClass() { value = 3 } };
w = new SecondWindow() { DataContext = vm };
w.Show();
}
private void ChangeProperty(object sender, RoutedEventArgs e)
{
vm.InstanceOfMyClass.value = 7;
}
}
以及实现 INotifyPropertyChanged 的视图模型类:
class ViewModel : INotifyPropertyChanged
{
private MyClass _instance;
public MyClass InstanceOfMyClass
{
get
{
return _instance;
}
set
{
_instance = value;
OnPropertyChanged("InstanceOfMyClass");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
class MyClass
{
public int value { get; set; }
}
我希望文本块在单击按钮时将其文本更改为 5。数字"3"在启动时正确加载。当我创建MyClass
的新实例并将其设置为InstanceOfMyClass
时,窗口也会刷新 ViewModel
。
但是当我点击按钮时 - 或者更奇怪的是,当我临时存储InstanceOfMyClass
,将其设置为 null
并使用保存的变量重新分配它 - 没有任何反应。
知道为什么吗?
提前感谢!
在MyClass
中实现INotifyPropertyChanged
,然后重试。ChangeProperty
更改 value
属性时,不会通知视图有关更改的信息。
或者,您也可以尝试将ChangeProperty
重写为以下内容:
vm.InstanceOfMyClass = new MyClass() { value = 7 };
据我所知,这两种方法都应该解决问题。