我希望能够DataTemplate
根据ViewModel
.
我找不到任何明确的例子,我觉得我可能不够了解WPF
或XAML
不知道这是否可能。
我的ViewModel
属性表示用户是否折叠了应用程序一侧的列。如果列折叠,我只想显示每个用户的图像,如果列展开,我将显示图片、名字和姓氏StackPanel
。
我觉得有一些非常基本的东西我还不明白,我想我正在寻找可能尝试过这样的事情或知道如何以正确的方式做到这一点的人。
用户.cs
public class User
{
public string ImageFile {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
}
我正在使用ObservableCollection<User>
将我的User
对象集合保存在视图模型中。我想使用的 2 个数据模板。(现在我只是使用默认图像和文本来查看它的外观)
数据模板
<DataTemplate x:Key="UserCollapsed">
<Image Source="/Images/anon.png"
Height="50"
Width="50"
Margin="0,5,0,0"/>
</DataTemplate>
<DataTemplate x:Key="UserExpanded">
<StackPanel>
<Image Source="/Images/anon.png"
Height="50"
Width="50"
Margin="0,5,0,0"/>
<TextBlock Text="Firstname"/>
<TextBlock Text="Lastnamehere"/>
</StackPanel>
</DataTemplate>
我尝试编写一个样式,并将其应用于视图中的 ItemsControl,并且我尝试编写一个使用触发器来决定使用哪个模板的数据模板,但我不太清楚我要去哪里错误的。
风格
<Style x:Key="userTemplateStyle" TargetType="ItemsControl">
<Setter Property="ItemTemplate" Value="{StaticResource UserExpanded}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ColumnIsCollapsed, Source={StaticResource ViewModel}}" Value="True">
<Setter Property="ItemTemplate" Value="{StaticResource UserCollapsed}"/>
</DataTrigger>
</Style.Triggers>
</Style>
当我在 XAML 中的 ItemsControl 上添加 Style 属性时,出现以下异常。
例外
{"Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.Windows.DataTemplate'."}
以及我尝试用作 ItemsControl 的 ItemTemplate 的 DataTemplate。(我觉得这是错误的方法,但我还是尝试了)
数据模板
<DataTemplate DataType="{x:Type md:CUser}">
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ColumnIsCollapsed, Source={StaticResource ViewModel}}" Value="True">
<Setter Property="DataTemplate" Value="{StaticResource UserCollapsed}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
项目控制
<ItemsControl Visibility="{Binding ColumnVisibility}"
Style="{StaticResource userTemplateStyle}"
BorderThickness="0"
Name="itcLoggedInUsers"
Margin="0"
ItemsSource="{Binding LoggedInUsers}"
Grid.Row="1"/>