我有以下XAML
<DataGrid Name="grid">
<DataGrid.Columns>
<DataGridTextColumn Header="Technology" Binding="{Binding Name}" />
<DataGridTextColumn Header="Version" Binding="{Binding Number}" />
</DataGrid.Columns>
</DataGrid>
以下课程
public class Data
{
public List<Technology> Technologies { get; set; }
}
public class Technology
{
public string Name { get; set;}
public int Number { get; set; }
}
列表Technologies
是datagrid的数据源。此解决方案在datagrid中有所有列表项。
我想只显示Number
不为空的项目。实现它的最佳方法是什么?
答案 0 :(得分:2)
您可以在DataTrigger
DataGridRow
<DataGrid Name="grid">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Number}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Technology" Binding="{Binding Name}" />
<DataGridTextColumn Header="Version" Binding="{Binding Number}" />
</DataGrid.Columns>
</DataGrid>
或者,您可以将Visibility
的{{1}}绑定到DataGridRow
并使用转换器,Number
返回Visibility.Collapsed
,null
}} p>
答案 1 :(得分:2)
当您将集合设置为ItemsSource时,请通过ListCollectionView
...
grid.ItemsSource
= new ListCollectionView(Technologies);
((ListCollectionView)grid.ItemsSource).Filter += IsNotNull;
有这样的谓词......
private bool IsNotNull(object obj )
{
return ((Technology)obj).Number != null;
}
虽然这是一个奇怪的问题,但您的Number
属性为int
而不是int?
,它怎么可能为空?
另外,我建议您在ObservableCollection<Technology>
更改时使用Number
,以便您自动过滤。另外,请确保Technology
已INotifyPropertyChanged
已实施。