wpf 触发器 Datagrid RowCount

标签 wpf datagrid rowcount

我有一个 DataGrid,其中定义了一些列。这些行绑定(bind)到 ObservableCollection。 网格旁边有一个按钮,该按钮应该可见或不可见,具体取决于行数。当有 2 行(或更多行)时,它应该是可见的。 这个想法是使用 DataGrid.Rows.Count 或 DataGrid.Items.Count。

编译器不知道属性“DataGrid.Rows”或“DataGrid.Items”。你知道另一种方法吗?我喜欢仅将其放在 Xaml 中,而不使用转换器。 (我知道可以通过对 itemcollection 进行计数的转换器来实现)有更聪明的方法吗?

<Grid>

<DataGrid Name="dg1">
    <DataGrid.Columns> 
         ...
    </DataGrid.Columns>
</DataGrid>
<Button Name="btn1" Visibility="Visibility">
</Button>
<Grid.Triggers>
    <Trigger SourceName="dg1" Property="DataGrid.Items.Count" Value="0">
        <Setter TargetName="btn1" Property="Visibility" Value="Hidden"></Setter>
    </Trigger>
    <Trigger SourceName="dg1" Property="DataGrid.Items.Count" Value="1">
        <Setter TargetName="btn1" Property="Visibility" Value="Hidden"></Setter>
    </Trigger>
</Grid.Triggers>

最佳答案

您可以通过在要显示/隐藏的按钮上设置 DataTrigger 并绑定(bind)到 DataGrid 上的 Items.Count 属性来实现此目的。

每当集合中的项目数达到 0 或 1 时,该按钮就会隐藏,当集合中的项目数超过 1 时,该按钮就会再次显示。

XAML:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <DataGrid Name="dg1" ItemsSource="{Binding MyFooCollection}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Id}" />
                <DataGridTextColumn Binding="{Binding Name}" />
            </DataGrid.Columns>
        </DataGrid>
        <StackPanel>
            <Button Content="Add row" Click="btnAdd" />
            <Button Content="Remove row" Click="btnRemove" />
            <Button Content="Will be shown/hidden">
                <Button.Style>
                    <Style TargetType="Button">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Items.Count, ElementName=dg1}" Value="0">
                                <Setter Property="Visibility" Value="Hidden" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Items.Count, ElementName=dg1}" Value="1">
                                <Setter Property="Visibility" Value="Hidden" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
            </Button>
        </StackPanel>
    </StackPanel>
</Window>

代码隐藏:

public partial class MainWindow : Window
{
    public ObservableCollection<Foo> MyFooCollection { get; set; }

    public MainWindow()
    {
        InitializeComponent();

        this.MyFooCollection = new ObservableCollection<Foo> 
        { 
            new Foo(1, "Bar1"), new Foo(2, "Bar2"), new Foo(3, "Bar3"), 
            new Foo(4, "Bar4"), new Foo(5, "Bar5"), new Foo(6, "Bar6") 
        };

        this.DataContext = this;
    }

    private void btnAdd(object sender, RoutedEventArgs e)
    {
        MyFooCollection.Add(new Foo(11, "Test1"));
    }

    private void btnRemove(object sender, RoutedEventArgs e)
    {
        if (MyFooCollection.Any())
            MyFooCollection.RemoveAt(0);
    }

    public class Foo
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public Foo(int id, string name)
        {
            Id = id;
            Name = name;
        }
    }
}

关于wpf 触发器 Datagrid RowCount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13493413/

相关文章:

.net - future 的(Windows)桌面应用开发 : the future of WPF and Silverlight

c# - 在 PropertyGrid 控件中显示只读属性

WPF DataGrid 单击以创建新项目

WPF 将 DataGrid 绑定(bind)到 CollectionViewSource : working via DataContext, 通过 ItemsSource 为空;不同之处?

wpf - 从 WPF 应用程序导航到 URL(用于打开网页)

c# - 将空白行插入到具有动态列的数据网格中

java - vaadin 表的总行数

c# - 如何获取 ObjectDataSource 的行数

php - PDO:使用 rowCount 确定数据库中的表数?

c# - 使用 FlowDocumentPageViewer 时确定内联元素的页码?