我将一个列表绑定到我的User
对象 ObservableCollection,因此它会自动更新。我使用模板来显示用户,但我还想根据User 对象Name
上的值在名称旁边显示一个图像图标。IsOp
我不知道如何在谷歌搜索中表达这一点,如果有人能指出我正确的方向,请。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:loc="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="196">
<Window.Resources>
<DataTemplate DataType="{x:Type loc:User}">
<Grid Height="28">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="21" MinWidth="21" MaxWidth="21" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Name="imgUserType" Source="/WpfApplication1;component/Images/NormalUser.png" VerticalAlignment="Center" HorizontalAlignment="Center" Width="16" Height="16" Margin="5,0,0,0" />
<Label Name="lblName" Content="{Binding Name}" Grid.Column="1" Padding="7,5,5,5" VerticalContentAlignment="Center" HorizontalAlignment="Left" />
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsOp}" Value="True">
<Setter TargetName="imgUserType" Property="Source" Value="/WpfApplication1;component/Images/OpUser.png" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding}">
</ListBox>
</Grid>
</Window>
编辑1:
我刚刚遇到了一个叫做 DataTriggers 的东西,它监视某个值然后相应地塑造模板……这是要走的路吗?
编辑 2: 我已经实现了一个基本触发器来更改图标。现在我的新问题是如何结合两个属性。
IsOp (true) + Away (true) = OpAwayIcon
IsOp (true) + Away (false) = OpIcon
IsOp (false) + Away (true) = NormalIconAway
IsOp (false) + Away (false) = NormalIcon
编辑 3:
我找到了解决方案:
<DataTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsOp}" Value="True"/>
<Condition Binding="{Binding IsAway}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter TargetName="imgUserType" Property="Source" Value="/WpfApplication1;component/Images/OpUserAway.png" />
</MultiDataTrigger>
</DataTemplate.Triggers>