首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当项目满足某些条件时,在DataGrid行中显示图标

当项目满足某些条件时,在DataGrid行中显示图标
EN

Stack Overflow用户
提问于 2014-01-30 12:20:10
回答 2查看 2K关注 0票数 0

我有一个WPF DataGrid,它有3列。第一条和第二条将显示与该条目相关的符合某些条件的图标。第三列是项目的名称。我的代码如下:

代码语言:javascript
复制
<DataGrid x:Name="DG_Items" DisplayMemberPath="{x:Null}" Margin="5"
          HeadersVisibility="None" AutoGenerateColumns="False"
          CanUserReorderColumns="False" CanUserResizeColumns="False"
          CanUserSortColumns="False" IsReadOnly="True" IsEnabled="True"
          ItemsSource="{Binding}" Initialized="DG_Items_Initialized"
          MouseMove="DG_Items_MouseMove" SelectionChanged="DG_Items_SelectionChanged">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Attachment" Width="SizeToCells" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image Source="Images/Attachment_16x16.png" Visibility="Hidden"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Comment" Width="SizeToCells" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image Source="Images/Comment_16x16.png" Visibility="Hidden"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn Binding="{Binding Path=ItemName, Mode=OneWay}" Width="*" />
    </DataGrid.Columns>
</DataGrid>

如您所见,图标(附件和注释)是Visibility="Hidden"ItemSource是在如下方法中使用实体框架动态填充的:

代码语言:javascript
复制
public void UpdateDG_Items()
{
    DG_Items.ItemsSource = DB.Item.Where(x => x.CodTipoItem == codTipoItemSelecionado && x.SituacaoRegistro != 9)
                                  .OrderBy(x => x.NomeItem).ToList();
    DG_Items.DisplayMemberPath = "ItemName";
    DG_Items.SelectedValuePath = "CodItem";
}

我只想在具有附件、注释或两者兼有的项目的行中显示图标。我没能在XAML中触发。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-30 12:46:36

你可以用转换器来做这件事,就像这样:

这在视图的xaml文件中

代码语言:javascript
复制
xmlns:converter="clr-namespace:<YourProjectName>.Converters"

这是你的转换器:

代码语言:javascript
复制
class TrueToVisibilityVisible : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return (bool)value ? Visibility.Visible : Visibility.Hidden; 
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            //you could implement this if you wil use it ;-)
            throw new NotImplementedException();
        }
    }

这就是你如何使用它的方法:在你的数据农业中

代码语言:javascript
复制
<Image Source="Images/Comment_16x16.png" Visibility="Hidden"/>

用这个代替

代码语言:javascript
复制
<Image Source="Images/Comment_16x16.png" Visibility="{Binding <PropertyToBind>, Converter={StaticResource <converterName>}}"/>

顺便说一句,在视图的参考资料中,您就是这样声明它的

代码语言:javascript
复制
<converter:TrueToVisibilityVisible x:Key="<converterName>"/>

祝你好运:-)

票数 2
EN

Stack Overflow用户

发布于 2014-01-30 13:39:28

您可以使用“触发器”:“数据触发器”(将其绑定到第一列的值)和“事件触发器”来自定义数据列的可见性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21456381

复制
相关文章

相似问题

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