我希望获得基于数据网格的选定项目计数的可见性。但是,这在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}}"
在我看来,该属性没有更新。如果我在转换器中放置断点,它只会在初始阶段被调用。
这是因为
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" />