在XML绑定的WPF数据网格中折叠行时的奇怪行为

本文关键字:折叠 网格 绑定 XML WPF 数据 数据网 | 更新日期: 2023-09-27 18:08:31

我使用wpf数据网格与xml文件作为DataContext。除了遍历表和折叠单个行之外,所有工作都很好。有几个复选框,用户可以根据他们的错误级别字符串来决定他想要看到哪种类型的行。

如果复选框被选中,则一些行被折叠,另一些行不被折叠。您需要取消选中复选框,然后再次选中复选框,以折叠第一次尝试的复选框和其他一些复选框。如果您再次检查,则每次都会折叠更多行。我猜这与列表中有多少是可见的,有多少是不可见的有关,因为窗口大小。

提前感谢。

foreach (DataGridRow r in rows)
        {
            bool showRow = true;
                var tb = Datagrid.GetCell(dataGridEvents, r, 2).Content;
                string level = ((TextBlock)tb).Text;
                switch (level)
                {
                    case "Warning":
                        showRow = checkBoxWarnings.IsChecked.HasValue ? checkBoxWarnings.IsChecked.Value : false;
                        break;
                    case "Critical":
                        showRow = checkBoxCritical.IsChecked.HasValue ? checkBoxCritical.IsChecked.Value : false;
                        break;
                    case "OK":
                        showRow = checkBoxOK.IsChecked.HasValue ? checkBoxOK.IsChecked.Value : false;
                        break;
                    case "Unknown":
                        showRow = checkBoxUnknown.IsChecked.HasValue ? checkBoxUnknown.IsChecked.Value : false;
                        break;
                }                
            r.Visibility = showRow ? Visibility.Visible : Visibility.Collapsed;
        }

在XML绑定的WPF数据网格中折叠行时的奇怪行为

我猜这与列表中有多少是可见的,有多少是不可见的有关。
我认为你是对的。

在我看来,你应该避免以任何方式使用可见性,你最好为DataContext使用ICollectionView,并在CheckBox事件上过滤它。
您可以在这里找到一个示例:如何:在DataGrid控件

中对数据进行分组、排序和筛选