绑定到多个窗口上的同一属性不起作用

本文关键字:属性 不起作用 窗口 绑定 | 更新日期: 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 };

据我所知,这两种方法都应该解决问题。