2011-10-05 60 views
2

空条目我有以下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不为空的项目。实现它的最好方法是什么?

回答

2

当U集合设为ItemsSource,通过ListCollectionView ...

 grid.ItemsSource 
      = new ListCollectionView(Technologies); 
     ((ListCollectionView)grid.ItemsSource).Filter += IsNotNull; 

有这样的断言....

 private bool IsNotNull(object obj) 
     { 
     return ((Technology)obj).Number != null; 
     } 

虽然好奇的问题,您Number属性intint?怎么能说是空?

此外,我建议您使用ObservableCollection<Technology>Number更改时自动筛选的好处。还请确保Technology已执行INotifyPropertyChanged

+0

关于'数字'不是可以为空的好处,我想这是一个错字 –

+0

这是一个错字:) I ment 0,not null。感谢您提供关于'ObservableCollection'的建议,我想我的应用程序不需要这些。没有什么改变“数量”。 –

2

可以使用DataTriggerDataGridRow

<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结合VisibilityNumber并使用一个转换器,它返回Visibility.CollapsednullVisibility.Visible否则

+0

@Melak,这可能会导致交替行样式的问题如果交替行有桃说背景颜色,那么如果行1是好的,行2是空的,行3是好的,那么你会看到row1和row3与桃连接背景。 –

+0

@AngelWPF:是的,如果使用交替行颜色,那将是一个问题。在“CollectionView”上使用过滤器的问题是,当Number变化时它不会自动更新。所以这一切都归结于这是如何使用 –

+0

如果列表是ObservableCollection 那么它也会过滤属性更改。 –