在开发多窗口 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 。知道为什么吗?
提前致谢!
最佳答案
实现INotifyPropertyChanged
在 MyClass
然后再试一次。在 ChangeProperty
你改变value
属性,它不会通知 View 有关更改。
或者你也可以尝试重写你的ChangeProperty
到以下:
vm.InstanceOfMyClass = new MyClass() { value = 7 };
据我所知,这两种方法都应该解决问题。
关于c# - 绑定(bind)到多个窗口上的相同属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34982331/