gpt4 book ai didi

Wpf 命令绑定(bind)到 ViewModel 或模型?

转载 作者:行者123 更新时间:2023-12-01 04:45:47 25 4
gpt4 key购买 nike

我有几个模型和一个 TreeView 来显示它们。 HierarchicalDataTemplate 使用 ItemsSource 显示模型。
罗纹轮廓...

public class ModelA : ObservableBase
{
private string _name = "A";
private Observablecollection<ModelB>_bModels = new Observablecollection<ModelB>();

String Name {
get {return _name;}
set { _name = value; OnPropertyChanged("Name"}}
Observablecollection<ModelB>BModels {
get {retun __bModels; }
set {_bModels = value; OnPropertyChanged("BModels"}}
}

ModelB is similar.

现在 TreeView 可以正确显示数据,并且我已将 ContextMenus 添加到每个级别。最初在 HierarchicalData 中的 TextBlock.ContextMenu 上,但现在作为 TreeView.Resource 中的资源。

这些命令现在在每个模型中调用 CommandProperties,这很好,如果它是应该完成的方式,但是它确实有一个命令有问题,需要从另一个模型或 ViewModel 调用 CommandProperty。
我已将它设置为 ViewModel 并且它可以工作,但我现在到处都有命令。

因此,问题是命令应该去哪里?在模型中它们属于和/或在 ViewModel 中?

命令是“添加 A”、“删除 A”、“添加 B”、“删除 B”
Root- Add A
A- Add B/Remove A (this)
B- Remove B
B- Remove B
A- Add B/Remove A (this)
B- Remove B

如果需要,我会显示更多代码,但它会占用大量空间,希望您能从中理解概念和问题。

最佳答案

基本上所有的绑定(bind)都应该在 View 和 ViewModel 之间解决。 Model 应该只用于为 ViewModel 提供数据,它应该从中公开以供 View 通过绑定(bind)显示。

MVVM 应用程序的结构应该或多或少像这样:

  • 型号 - 存储数据(可能实现了一些基本的数据操作,例如计算)
  • 查看型号 - 实现了 View 对数据所做的所有操作。例如,如果您从 DataGrid 中删除行,您的 ViewModel 应该有一个命令,该命令从模型或应用程序的某个附加层实现对方法的调用,这将执行所需的操作(但 ViewModel 不应该对数据本身进行操作) . ViewModel 还应该从 Model 获取数据并将其公开为与 View 绑定(bind)的属性以显示数据。
  • 查看 - 提供用户界面以允许用户执行操作。除了与显示相关的内容(即使在代码后面)之外,它不应执行任何操作。例如,在代码后面绑定(bind)数据的事件应该被禁止遵循 MVVM 模式,但是当按钮被点击时切换按钮颜色的 Action 可以在代码后面或 ViewModel 中完成(取决于个人喜好),因为它只是 View有关的。
  • 数据运营层 - 使用附加层来管理在模型上执行的数据操作是很常见但可选的。
  • 关于Wpf 命令绑定(bind)到 ViewModel 或模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46690091/

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