gpt4 book ai didi

wpf - MVVM ViewModel 范围

转载 作者:行者123 更新时间:2023-12-03 10:24:34 27 4
gpt4 key购买 nike

我的观点相当复杂。它会有一些图表、网格、组合框等。其中一些东西会绑定(bind)到不同的数据。我的理解是每个 View 都有一个与之关联的 View 模型。所以在这种情况下,我的 View 模型最终会变得非常大,因为它需要拥有 View 中每个组件将绑定(bind)到的数据。如果 View 很复杂,这就是它必须的方式吗?

此外,我习惯于将事件处理程序添加到我的控件并以这种方式处理事件。在 MVVM 方式中,我应该如何处理事件?例如,我被困在如何以 MVVM 方式正确处理图表的鼠标移动事件或网格的选择更改事件。

最佳答案

我部分同意@Rich 和@Elad Katz。在我们的应用程序中,我们使用具有表示子 ViewModel 的属性的 MainViewModel。如

public class MainViewMod
{
public SomeViewModel ContentViewModel
{
get;
set;
}
public StatusBarViewModel StatusBarViewModel
{
get;
set;
}
}

MainView 从 MainView 获取它的 DataContext。假设 MainView 是一个窗口,它有一个 <ContentControl Content="{Binding ContentViewModel}" /><ContentControl Content="{Binding StatusBarViewModel}" /> .

不同的 ContentControls “活”在 MainView 的可视化树中的某处。

不同的 ViewModel 不需要相互了解。只要 View 模型之间的关系松散,我看不出 subview 模型有问题。我的经验法则是 StatusViewModel 可以访问 MainViewModel。在某些情况下,StatusViewModel 可以访问 ContentViewModel,但只能通过 MainViewModel,但要保持在最低限度。但请记住@Elad 所说的不要让它们相互依赖太多。

说到事件,我不需要太多的场景来直接在 ViewModel 中访问事件。假设您有一个包含 listView 的 View ,并且您需要获取或设置所选项目。在这种情况下,我将向 ViewModel 添加一个属性,即 SelectedItem,并将该属性绑定(bind)到 ListView 的 SelectedItem。这样,您就可以从 View 模型中访问所选项目。

请记住, View 的代码隐藏没有问题。在某些情况下,您必须使用代码隐藏。但是,我建议不要订阅代码隐藏中的事件,因为它们很难找到(比如 20 个 View 中有一个具有代码隐藏,查看代码隐藏以查找任何 View 的代码是不自然的在那里了解正在发生的事情)。如果您为元素使用事件,请使用其他答案中提到的命令绑定(bind),或订阅 XAML 中的事件。在某些情况下,如果我需要访问 View 模型,我更喜欢使用附加行为。

关于wpf - MVVM ViewModel 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123853/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com