使用包含不同类型详细信息的主从视图
我尝试使用 MVVM 模式创建一个视图,该视图将在一侧(主视图)显示树视图,并且对于所选节点,在左侧显示一些信息(详细信息)。
树视图绑定在 ViewModel 的集合上,该集合实际上是一个抽象类。我有两个继承自抽象 ViewModel 的类,一个代表一个类别,另一个代表一个需求。
在树中,类别可能具有属于类别或需求的子级。
要求不能有孩子,他们只是叶子。
即:
- 类别1
- 要求 1
- 子类别 1
- 类别 2
- 子类别 2
- 类别 3
我设法在详细视图中显示抽象类中的一些数据。我的问题是,如果选择了类别或要求,我必须显示不同的数据......我不知道如何执行此操作。
是否有一个控件允许我根据树中所选节点的类型显示数据?
我的 XAML 现在看起来像这样:
<Grid DataContext="{Binding Requirements}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="350" />
<ColumnDefinition Width="400*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<TreeView
x:Name="treeRequirements"
Grid.Column="0" Grid.Row="0"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
ItemsSource="{Binding}">
<TreeView.ItemContainerStyle>
<!-- This Style binds a TreeViewItem to a PersonViewModel. -->
<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" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<Grid
Grid.Column="1" Grid.Row="0"
DataContext="{Binding ElementName=treeRequirements, Path=SelectedItem}">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<!-- Name comes from the abstract class, so no problem -->
<TextBlock
Grid.Row="0" Grid.Column="0">
Name
</TextBlock>
<TextBox
Grid.Row="0" Grid.Column="1"
Text="{Binding Path=Name, Mode=TwoWay}" />
</Grid>
</Grid>
我的问题是,我不知道如何根据所选节点表示的视图模型的类型显示不同的细节。我只能显示抽象类的属性。
有什么帮助吗?
编辑
总结我的问题,整个主从细节和树视图与问题无关,只需放在上下文中即可。我的问题实际上只是根据视图模型的子类型显示不同的字段,这可能会有所不同。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要将多个
HierarchicalDataTemplate
声明为资源,并为每个资源指定DataType
属性。如果您没有指定Treeview.ItemTemplate
.net 将在运行时选择最匹配的模板并相应地显示数据。示例:
您可能还想阅读以下文章(特别是使用
HierarchicalDataTemplate
的足球示例:http://msdn.microsoft.com/en-us/library/ms742521.aspxYou need to declare multiple
HierarchicalDataTemplate
s as resources specifying theDataType
attribute for each. If you do not specify aTreeview.ItemTemplate
.net will select the best matching template at runtime and display the data accordingly.Example:
You may also want to read the following article (specifically the soccer example which uses
HierarchicalDataTemplate
: http://msdn.microsoft.com/en-us/library/ms742521.aspx我很好奇你的问题,所以我自己环顾四周。看起来您可能想要使用 DataTemplateSelector。有一个很好的例子 此处。
I was curious about your question, so I did some looking around myself. It looks like you might want to use a DataTemplateSelector. There's a nice example shown here.