如何根据对象的2个绑定属性在DataTemplate中显示图像

时间:2012-05-16 10:42:16

标签: c# wpf data-binding datatemplate

我将列表绑定到我的User对象ObservableCollection,因此它会自动更新。我使用模板显示用户Name,但我还想在名称旁边显示图像图标,具体取决于用户对象上IsOp的值。

我不知道如何在Google搜索中说出这一点,如果有人可以指出我正确的方向。

<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>

0 个答案:

没有答案