c# - 绑定(bind)到多个窗口上的相同属性不起作用

标签 c# wpf mvvm

在开发多窗口 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 的​​ View 模型类:
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; }
}

当我单击按钮时,我希望文本 block 将其文本更改为 5。
数字“3”在启动时正确加载。当我创建 MyClass 的新实例时,窗口也会刷新。并将其设置为InstanceOfMyClass在我的ViewModel .

但是当我按下按钮时——或者,更奇怪的是,当我临时存储 InstanceOfMyClass 时, 设置为 null并用保存的变量重新分配它 - 没有任何 react 。

知道为什么吗?

提前致谢!

最佳答案

实现INotifyPropertyChangedMyClass然后再试一次。在 ChangeProperty你改变value属性,它不会通知 View 有关更改。

或者你也可以尝试重写你的ChangeProperty到以下:

vm.InstanceOfMyClass = new MyClass() { value = 7 };

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

关于c# - 绑定(bind)到多个窗口上的相同属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34982331/

相关文章:

c# - 使用 Entity Framework 提高效率

WPF 设计数据不工作

entity-framework - Entity Framework 和业务层/逻辑

java - 在ZK中,从其他ViewModel更改组件的属性

c# - 如何实现接口(interface)返回带有空方法体的 IAsyncResult

c# - OnPropertyChanged 在 xamarin.forms 应用程序中的 android 上引发异常

c# - 如何正确通知 Blazor UI 我的用户状态已更改?

wpf - 在 WPF 中,什么是 TemplatedParent?

c# - 如何扩展 Entity Framework 6 模型

mvvm - 带有条件的 knockout 事件绑定(bind)