ListView上的WPF DataTemplate以可视化不同类型的用户控件
我有一个ListView,我想展示不同类型的用户控件,这取决于为列表视图项设置的视图模型 在xaml中:ListView上的WPF DataTemplate以可视化不同类型的用户控件,wpf,listview,datatemplate,Wpf,Listview,Datatemplate,我有一个ListView,我想展示不同类型的用户控件,这取决于为列表视图项设置的视图模型 在xaml中: <ListView ItemsSource="{Binding Items}"> <ListView.Resources> <DataTemplate DataType="{x:Type viewModels:LabelledTextViewModel}"> <contr
<ListView ItemsSource="{Binding Items}">
<ListView.Resources>
<DataTemplate DataType="{x:Type viewModels:LabelledTextViewModel}">
<controls:LabelledTextBox/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:FolderChooserViewModel}">
<standardControls:FolderChooser/>
</DataTemplate>
</ListView.Resources>
</ListView>
现在这很好,但是我的
LabelledTextViewModel
可以编辑,也可以不编辑。如何在XAML中检查viewmodel上的属性“IsEdit”,并根据其值显示LabelledTextBlockControl
或LabelledTextBoxControl
?您可以在数据模板中使用DataTrigger
:
<ListView ItemsSource="{Binding Items}">
<ListView.Resources>
<DataTemplate DataType="{x:Type viewModels:LabelledTextViewModel}">
<Grid>
<controls:LabelledTextBlockControl x:Name="textBlock"/>
<controls:LabelledTextBoxControl x:Name="textBox" Visibility="Collapsed"/>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsEditable}" Value="True">
<Setter TargetName="textBlock" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="textBox" Property="Visibility" Value="Visible"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:FolderChooserViewModel}">
<standardControls:FolderChooser/>
</DataTemplate>
</ListView.Resources>
</ListView>
对于您的需求,您需要使用来为您做出选择,或者您可以尝试命名您的数据模板
并使用数据触发器设置它们:
<ListView>
<ListView.Resources>
<DataTemplate x:Key="DefaultDataTemplate" DataType="{x:Type viewModels:LabelledTextViewModel}">
<controls:LabelledTextBox/>
</DataTemplate>
<DataTemplate x:Key="AnotherDataTemplate" DataType="{x:Type viewModels:FolderChooserViewModel}">
<standardControls:FolderChooser/>
</DataTemplate>
</ListView.Resources>
<ListView.Style>
<Style TargetType="{x:Type ListView}">
<Setter Property="ItemTemplate" Value="{StaticResource DefaultDataTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsEditable}" Value="True">
<Setter Property="ItemTemplate" Value="{StaticResource AnotherDataTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.Style>
</ListView>
本例假设您正在将DataTemplate
s设置为ItemTemplate
属性。。。如果没有,则需要将该属性更改为相关属性