DataGrid中绑定 - 不显示列表从
空条目我有以下XAMLDataGrid中绑定 - 不显示列表从
<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中的所有列表项。
我只想显示Number
不为空的项目。实现它的最好方法是什么?
当U集合设为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
。
可以使用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>
或者你可以为DataGridRow
结合Visibility
到Number
并使用一个转换器,它返回Visibility.Collapsed
为null
和Visibility.Visible
否则
@Melak,这可能会导致交替行样式的问题如果交替行有桃说背景颜色,那么如果行1是好的,行2是空的,行3是好的,那么你会看到row1和row3与桃连接背景。 –
@AngelWPF:是的,如果使用交替行颜色,那将是一个问题。在“CollectionView”上使用过滤器的问题是,当Number变化时它不会自动更新。所以这一切都归结于这是如何使用 –
如果列表
关于'数字'不是可以为空的好处,我想这是一个错字 –
这是一个错字:) I ment 0,not null。感谢您提供关于'ObservableCollection'的建议,我想我的应用程序不需要这些。没有什么改变“数量”。 –