c# – MVVM从其他ViewModel对ViewModel执行命令
我现在用一个简单的任务苦苦挣扎了大约14天:在数据库中,我有硬件类别的定义.例如 :
>硬盘 >内部 此列表在数据库中定义如下: [ID - ParrentID - Name] : 1 - 0 - HDD,2 - 1 - Internal,3 - 1 - External,4 - 1 - Flash. 通过实体框架,我将这些行放入我的应用程序中.从这个平面数据我然后创建结构化对象,这是我的DataModel.该模型定义如下: public class Category { private int _id = -1; private string _name = ""; private List<Category> _subCategories = null; // property getters and setters,constructors,and bool HasSubCategories } 现在,从这些我创建名为SubCategoryViewModel的ViewModel绑定到我的TreeView.因此,我可以在树视图中查看我的类别,并使用我定义和维护的层次结构.这很好用.在SubCategoryViewModel中,为MouseDoubleClick定义了一个通过附加行为的命令,该命令也绑定到TreeView.因此,当用户双击Item时,在SubViewCategoryModel中定义的方法将执行特定的代码. SubCategoryViewModel列表嵌套在HWDocumentViewModel中,这是我窗口的主ViewModel. 我试过这种方法: 或者一般来说,我是否采用正确的方法在WPF中创建类似Warehouse的应用程序? 非常感谢. 编辑:我的TreeView的XAML看起来像这样: <TreeView x:Name="tvCategories" Background="White" ItemsSource="{Binding Categories}"> <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}"> <Setter Property="IsExpanded" Value="{Binding IsExpanded,Mode=TwoWay}" /> <Setter Property="IsSelected" Value="{Binding IsSelected,Mode=TwoWay}" /> <Setter Property="FontWeight" Value="Normal" /> <Setter Property="behaviors:MouseDoubleClick.Command" Value="{Binding MouseDoubleClickCommand}" /> <Setter Property="behaviors:MouseDoubleClick.CommandParameter" Value="{Binding}" /> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="FontWeight" Value="Bold" /> </Trigger> </Style.Triggers> </Style> </TreeView.ItemContainerStyle> <TreeView.Resources> <HierarchicalDataTemplate DataType="{x:Type localvm:SubCategoryViewModel}" ItemsSource="{Binding Children}"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding CategoryName}" /> </StackPanel> </HierarchicalDataTemplate> </TreeView.Resources> </TreeView> 解决方法
我不确定我是否看到了这个问题.您有一个子类别树,当选择一个子类别时,相应的SubCategoryViewModel将自己设置为主HWDocumentViewModel上的SelectedCategory.这似乎是一种合理的方法.
那么为什么你需要调用命令呢?为什么不能只在HWDocumentViewModel中加载新列表以响应其SelectedCategory属性的更改(即在setter中)? 如果您真的必须使用命令来调用加载,那么只需在每个SubCategoryViewModel中保留对主HWDocumentViewModel的引用,并使用简单的命令调用该命令: _mainViewModel.LoadCategoryCommand.Execute(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |