Привязка DataGrid - не показывать пустые записи из списка - PullRequest
2 голосов
/ 05 октября 2011

У меня есть следующие 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 является источником данных для сетки данных.Это решение содержит все элементы списка в сетке данных.

Я хочу показывать только элементы, где Number не равно нулю.Каков наилучший способ достичь этого?

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Когда вы устанавливаете коллекцию в 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? как это может быть Null?

Также я предлагаю вам использовать ObservableCollection<Technology> для автоматической фильтрации при изменении Number. Также убедитесь, что в Technology реализовано INotifyPropertyChanged.

2 голосов
/ 05 октября 2011

Вы можете использовать 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 для DataGridRow к Number и использовать конвертер, который возвращает Visibility.Collapsed для null и Visibility.Visible в противном случае

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...