DataGrid 绑定 - 不显示列表中的空条目

发布于 2024-12-08 12:23:33 字数 658 浏览 1 评论 0原文

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

I have following XAML

<DataGrid Name="grid">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Technology" Binding="{Binding Name}" />
        <DataGridTextColumn Header="Version" Binding="{Binding Number}" />
    </DataGrid.Columns>
</DataGrid>

And following classes

public class Data
{
    public List<Technology> Technologies { get; set; }
}

public class Technology
{
    public string Name { get; set;}
    public int Number { get; set; }
}

List Technologies is the source of data for datagrid. There are all list items in datagrid by this solution.

I want show only items where Number is not null. What is the best way to achieve it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡淡的优雅 2024-12-15 12:23:33

当您将集合设置为 ItemsSource 时,通过 ListCollectionView 执行此操作...

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

有一个像这样的谓词...

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

虽然是一个奇怪的问题,但您的 Number 属性是 < code>int 不是 int? 怎么可能是 Null?

另外,我建议您使用 ObservableCollection ,以便在 Number 更改时自动过滤。还要确保 Technology 已实现 INotifyPropertyChanged

When u set the collection to the ItemsSource, do it via a ListCollectionView...

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

Have a predicate like this....

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

Although a curious question, your Number property is int not int? how can it be Null?

Also I suggest you to use ObservableCollection<Technology> for your benefit of auto filtering when Number changes. Also make sure Technology has INotifyPropertyChanged implemented.

伴梦长久 2024-12-15 12:23:33

您可以在 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>

或者,您可以将 DataGridRowVisibility 绑定到 Number > 并使用一个转换器,它返回 Visibility.CollapsednullVisibility.Visible 否则

You can use a DataTrigger on 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>

Alternatively you could bind Visibility for DataGridRow to Number and use a Converter which returns Visibility.Collapsed for null and Visibility.Visible otherwise

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文