WPF数据绑定和图像

时间:2013-10-07 13:09:00

标签: c# wpf

我有这个Xaml代码

<ListView x:Name="listOrderList" Margin="58,55,0,0" Background="{x:Null}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="DESCRIPTION" DisplayMemberBinding="{Binding Description}"/>
            <GridViewColumn Header="STATUS">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Image Source="{Binding Status}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

在C#中,我有一个enum状态,我知道显然<Image Source="{Binding Status}"/>无效。但是,如何做一些事情,例如我在Status枚举中有两个值。说是和否。如何为枚举值指定小图标并轻松使用绑定。

谢谢你。

3 个答案:

答案 0 :(得分:2)

查看IValueConverter

通过它,您可以检查绑定传递的值,然后创建要显示的Image对象。

答案 1 :(得分:2)

要么使用绑定转换器,要么将DataTriggers添加到DataTemplate。以下示例假定以下枚举

public enum Status { Status1, Status2 }

并根据Source属性的值将Image的Status属性设置为不同的图像资源。

<Window.Resources>
    <BitmapImage x:Key="Image1" UriSource="..."/>
    <BitmapImage x:Key="Image2" UriSource="..."/>
</Window.Resources>

...

<DataTemplate>
    <Image x:Name="image"/>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Status}" Value="Status1">
            <Setter TargetName="image" Property="Source"
                    Value="{StaticResource Image1}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Status}" Value="Status2">
            <Setter TargetName="image" Property="Source"
                    Value="{StaticResource Image2}"/>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

答案 2 :(得分:1)

您可以将图标图像路径设置为枚举,然后使用该枚举绑定DataGrid。

            <DataGridTemplateColumn x:Name="colStatus" Width="160" Header="Status">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                   <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" OverridesDefaultStyle="True" Width="135">
                                    <Image Height="14" Margin="2,0,0,0" HorizontalAlignment="Left" Source="{Binding Status}" Width="14" />
                                    </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>