我有几个模型和一个 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 应用程序的结构应该或多或少像这样:
关于Wpf 命令绑定(bind)到 ViewModel 或模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46690091/