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

标签 wpf xaml mvvm treeview

我有几个模型和一个 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/

    相关文章:

    c# - 如何设置 ViewBox 背景?

    WPF ComboBox ItemTemplate 绑定(bind)到字符串集合

    c# - 用户是通过 UI 更改了该值,还是通过依赖属性更改了该值?

    c# - 单个集合上的多个 ItemControl 同时将过滤器应用于所有 View

    c# - 如何在 UWP/C# 中使用 svg 文件资源设置 AppBarButton 图标

    wpf - 如何在 Qt/C++/QML 中实现类似 WPF 的 MVVM?

    c# - WPF TextBox 在验证时设置红色边框

    silverlight - 从 ItemsControl.ItemTemplate 绑定(bind)到 View 模型属性

    wpf - WPF 的 Prism 是什么?

    wpf - 在WPF中更新Shapes值的最佳方法