DataGrid绑定-不要显示列表中的空条目
本文关键字:列表 显示 绑定 DataGrid | 更新日期: 2023-09-27 18:10:27
我有以下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; }
}
List Technologies
是数据网格的数据源。该解决方案在数据网格中包含所有列表项。
我想只显示Number
不为空的项目。实现这一目标的最佳方式是什么?
当你将集合设置为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
。
可以在DataGridRow
上使用DataTrigger
<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>
或者您可以将DataGridRow
的Visibility
绑定到Number
,并使用Converter为null
和Visibility.Visible
返回Visibility.Collapsed
,否则