gpt4 book ai didi

c# - 避免使用TreeView和HierarchicalDataTemplate破坏MVVM

转载 作者:行者123 更新时间:2023-12-03 10:40:27 24 4
gpt4 key购买 nike

我有一个尝试使用MVVM模式设计的应用程序。在我的模型中,有分组和案例。一个组可能包含其他组以及案例。现在,我想在View的TreeView中显示它们。因此,由于组可能包含其他组和案例,因此树最终可能看起来像这样:

-
- - 案子
- - 案子
-
----
- - 案子
- 案子
案子

我将 View 附加到包含一个ObservableCollection of Groups的ViewModel上。我的问题是,要使TreeView能够按我希望的方式显示,唯一的方法是在指向数据类型(组或案例)的资源中使用HierarchicalDataTemplate,我感觉这是在破坏MVVM( View 应该在其中不知道该模型)。

这有效:

 <UserControl.Resources>
<HierarchicalDataTemplate DataType="{x:Type models:Group}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding GroupName}" />
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type models:Case}">
<TextBlock Text="{Binding CaseName}" />
</DataTemplate>
</UserControl.Resources>

对于TreeView:
<TreeView ItemsSource="{Binding AvailableCaseGroups}" />

这是否打破了MVVM的精神?否则我该怎么办?

最佳答案

如果View知道ViewModel,我认为这根本不会破坏MVVM。
当然,对于MVVM,在 View 中使用模型详细信息不合适。
要解决此问题,您可以建立一些ViewModels的层次结构-MainViewModel
-GroupViewModel g1
--- GroupViewModel g1a
--- CaseViewModel c1b
-GroupVieModel g2
...
然后,它不再是模型的结构细节,而是 View 模型之一,并且可以由 View 使用。如果模型将来可能在结构上发生变化,成为固定 list 或其他,则您的ViewModel仍然可以坚持旧的层次结构(转换Model),并且View仍然有效。

关于c# - 避免使用TreeView和HierarchicalDataTemplate破坏MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197165/

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