我有一个包含3列的WPF DataGrid。第1和第2是显示与满足某些条件的条目相关的图标。第3列是项目的名称。我的代码如下:
<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
,方法如下:
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中触发。
答案 0 :(得分:2)
你可以使用Converter来做到这一点,如下:
这在您的视图的xaml文件中
xmlns:converter="clr-namespace:<YourProjectName>.Converters"
这是你的转换器:
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();
}
}
这就是你如何使用它: 在您的Datagrid中
<Image Source="Images/Comment_16x16.png" Visibility="Hidden"/>
替换为
<Image Source="Images/Comment_16x16.png" Visibility="{Binding <PropertyToBind>, Converter={StaticResource <converterName>}}"/>
BTW这就是你在View的资源中声明它的方式
<converter:TrueToVisibilityVisible x:Key="<converterName>"/>
祝你好运: - )
答案 1 :(得分:1)
您可以使用“触发器”:“数据触发器”(将其绑定到第一列的值)和“事件触发器”来自定义您的数据网格列可见性。