gpt4 book ai didi

wpf - WPF TreeView构造-对每个项目使用 View / View 模型是否很好?

转载 作者:行者123 更新时间:2023-12-03 10:17:57 26 4
gpt4 key购买 nike

假设我要在TreeView中显示一些分层数据。

interface IName
{
string Name
{
get;
}
}

interface IUniversity:IName
{
IDepartment[] Departments
{
get;
}
}

interface IDepartment:IName
{
IStudents[] Students
{
get;
}
}

interface IStudent:IName
{

}

现在,我从一些 IUniversity中获取了 DataService的集合,我想将其显示在 TreeView中。

第一种方法是使用已知且常用的 HierarchicalDataTemplate,因此我不再赘述。我最近发现的另一种方法是使用 caliburn.micro.View.Model:
<ContentControl cm:View.Model={Binding Universities} />

对于每种类型,我在通用 View 模型中定义一个关系船:
class ParentChildenViewModel<TP,TC>
{
ObservableCollection<TC> Childrens
{
get;
}

Action<TC> ChildFactory;
}

现在每种类型都有对应的 ViewModel和一个 View IDepartment:
class DepartmentViewModel: ParentChildenViewModel<IDepartment,IStudent>
{
Action<IStudent> ChildFactory;

ObservableCollection<IStudent> Childrens
{
get;
}
}

因此,在构造DepartmentViewModel时,我传入其构造函数:
(student => new StudentViewModel(student,...)

将新项目添加到子项集合时将应用此方法

而且我有记者查看DepartmentView:
<TextBlock Text="{Binding Name}" />

另外对于学生我有StudentView:
<TextBlock Text="{Binding Name}" />

最后在显示大学的父 View 中:
<TreeView.Resources>
<HierarchicalDataTemplate x:Key="TVItem" ItemsSource="{Binding Path=Childrens}">
<ContentControl cm:View.Model="{Binding}" />
</HierarchicalDataTemplate>
</TreeView.Resources>

因此,简而言之:
第二种解决方案将每个项目映射到自己的 View 模型,而不是使用模板作为集合 View 模型(第一种方法)

我不确定哪种方法更好(最后是一个问题):
第一种方法的代码更少,性能更高。
第二更清楚吗?我认为
性能尤其重要,第二种方法是否一定会更昂贵?

最佳答案

与过早的优化相比,我总是更喜欢清洁和可读性。正如Sniffer所指出的那样,正确优化的唯一方法是对两个数据库都使用大数据集进行测试,然后看看哪个胜出。我通常发现,尽管计算机的运行速度比我认为的要快得多。

关于wpf - WPF TreeView构造-对每个项目使用 View / View 模型是否很好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17209271/

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