在 Avalonia(也许还有 WPF)中,为什么同一个 MainWindow 有两个不同的 ViewModel 实例?

问题描述 投票:0回答:1

在MainWindow的代码隐藏的构造函数中,定义一个MainWindowViewModel并将其分配给DataContext。 Constructor Code

然后MainWindow中有两个按钮,一个按钮的Click绑定到代码隐藏中的OnClick函数,另一个按钮的Command绑定到MainWindowViewModel中的ClickCommand。 axaml Code

两个函数都输出 ViewModel 的哈希码 OnClick Function | ClickCommand Function 当点击这两个按钮时,输出的HashCode不同,证明它们是两个不同的ViewModel实例。 Output Result

那么,为什么同一个 MainWindow 有两个不同的 ViewModel 实例?

我之前遇到过一个bug,通过Click更新ViewModel中的ObsverableCollection后UI不会更新。只有使用 Command 更新 ObsverableCollection 后,UI 才会正确显示。

感谢您的帮助!

wpf xaml avaloniaui
1个回答
-1
投票

我想我找到了原因。当在 App.axaml.cs 中指定 MainWindow 时,ViewModel 将是新的并分配给 MainWindow 的 DataContext,这将导致 ViewModel 的两个实例。 App.axmal.cs

© www.soinside.com 2019 - 2024. All rights reserved.