绑定到元素项计数

问题描述 投票:0回答:1

我希望获得基于数据网格的选定项目计数的可见性。但是,这在winui中似乎不起作用,但在WPF中却可以正常工作?

转换器:

 public object Convert(object value, Type targetType, object parameter, string language)
  {
      if ((int)value == 1)
          return Visibility.Visible;
      else
          return Visibility.Collapsed;
  }

装订:

   Visibility="{Binding ElementName=DataGrid,Path=SelectedItems.Count, 
     Converter={StaticResource Converter}}"

还尝试过 x:Bind:

  Visibility="{x:Bind DataGrid.SelectedItems.Count, 
    Converter={StaticResource CountToVisibilityConverter}}"

在我看来,该属性没有更新。如果我在转换器中放置断点,它只会在初始阶段被调用。

xaml winui-3
1个回答
0
投票

这是因为

Count
只是普通属性,更改时不会通知 UI。

实现此目的的一种方法是使用

DependencyProperty
创建自定义 DataGrid。例如:

public class DataGridEx : DataGrid
{
    public static readonly DependencyProperty SelectedItemsCountProperty =
        DependencyProperty.Register(
            nameof(SelectedItemsCount),
            typeof(int),
            typeof(DataGridEx),
            new PropertyMetadata(0));

    public DataGridEx()
    {
        SelectionChanged += (s, e) =>
        {
            SelectedItemsCount = SelectedItems.Count;
        };
    }

    public int SelectedItemsCount
    {
        get => (int)GetValue(SelectedItemsCountProperty);
        set => SetValue(SelectedItemsCountProperty, value);
    }
}

并像这样使用它:

<local:DataGridEx x:Name="DataGridExControl" .../>
<TextBlock Text="{x:Bind DataGridExControl.SelectedItemsCount, Mode=OneWay" />
© www.soinside.com 2019 - 2024. All rights reserved.