我有几个模型和一个TreeView来显示它们。 HierarchicalDataTemplate使用ItemsSource显示模型。 Ruff outline ...
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
如果需要我会显示更多代码,但会占用大量空间,希望你能从中理解这个概念和问题。
答案 0 :(得分:1)
基本上所有绑定都应在View和ViewModel之间解析。模型应该仅用于为ViewModel提供数据,从中公开它以便View通过绑定显示。
MVVM应用程序的结构应该或多或少看起来像这样: