首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将图标添加到WPF数据网格

将图标添加到WPF数据网格
EN

Stack Overflow用户
提问于 2013-02-01 20:41:54
回答 3查看 9.5K关注 0票数 2

我想在我的数据网格的每一行中添加一个图标。这些列是自动生成的,我已经添加了一个列,其中包含一个datagridtemplatecolumn,以便在第一列中显示一个图标。

这是我用来显示图标的xaml代码:

代码语言:javascript
复制
    <DataGrid ItemsSource="{Binding User.myDataTable}" IsReadOnly="True" FrozenColumnCount="1">
        <DataGrid.Columns>
            <DataGridTemplateColumn x:Name="IconHeader"  Header="" CanUserResize="False">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Image Source="myImage" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

这很好用。现在,我想要更改图标,如果在行的某一列中有一个条件为真。例如。如果列11为值"true“,则图标1;如果值为"false”,则为icon2。

我可以使用datagrid中的loadingrow事件来做这件事吗?我如何在mvvm中做到这一点?或者,有没有其他方法来做这样的事情?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-01 23:46:31

这里要做的最简单的事情是在CellTemplate中使用一个DataTrigger,它将根据到列数据的绑定触发:

代码语言:javascript
复制
<DataTemplate>
    <Image Source="myImage1" x:Name="img" />
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Path=[11]}" Value="False">
            <Setter TargetName="img" Property="Source" Value="myImage2" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

DataRow同时具有按索引或名称获取列的整数和字符串索引器,因此对于绑定路径,您可以使用带有列索引([3])或列名([MyColumn])的[]

票数 3
EN

Stack Overflow用户

发布于 2013-02-01 20:56:20

这听起来像是转换器的工作。只需将Image的Source-property绑定到您想要的属性:

代码语言:javascript
复制
<Image Source="{Binding Path=BoolProp, Converter={StaticResource BoolToImageConv}}"

您的转换器可能如下所示

代码语言:javascript
复制
public class BoolToImageConverter:IValueConverter
{
    public string FalsePath { get; set; }
    public string TruePath { get; set; }
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (System.Convert.ToBoolean(value))
        {
            return new BitmapImage(new Uri(TruePath));
        }
        return new BitmapImage(new Uri(FalsePath));
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }
}

在Window/UserControl的资源中,您必须引用您的Converter。

代码语言:javascript
复制
<Window.Resources>
    <conv:BoolToImageConverter FalsePath="pathforimageiffalse" TruePath="pathforimageiftrue" x:Key="BoolToImageConv"/>
</Window.Resources>
票数 2
EN

Stack Overflow用户

发布于 2013-02-01 20:56:12

我认为最好的方法是实现一个IValueConverter。如果column11为true,则显示一个图像,如果为false,则显示另一个图像。

IValueConverter:http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

类似于:

代码语言:javascript
复制
public class IconConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
     if ((bool)value == true)
     {
        // column11 = true, so show icon 1
        return image1;
     }
     else
     {
        return image2;
     }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14646548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档