[c#] WPF Datagrid RowDetailsTemplate可見性綁定到一個屬性


0 Answers

使用純XAML(+轉換器):

XAML:

<DataGrid.RowHeaderTemplate>
    <DataTemplate>
        <ToggleButton
            IsChecked="{Binding Path=DetailsVisibility,
                RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}},
                Converter={StaticResource _VisibilityToNullableBooleanConverter}}"
            />
    </DataTemplate>
</DataGrid.RowHeaderTemplate>

轉換器:

public class VisibilityToNullableBooleanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is Visibility)
        {
            return (((Visibility)value) == Visibility.Visible);
        }
        else
        {
            return Binding.DoNothing;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is bool?)
        {
            return (((bool?)value) == true ? Visibility.Visible : Visibility.Collapsed);
        }
        else if (value is bool)
        {
            return (((bool)value) == true ? Visibility.Visible : Visibility.Collapsed);
        }
        else
        {
            return Binding.DoNothing;
        }
    }
}
Question

我正在使用RowDetails面板RowDetailsVisibilityMode設置為“VisibleWhenSelected”和SelectionMode =“擴展”的WPF Datagrid,以便可以選擇多行,因此顯示RowDetails,如下所示:

<dg:DataGrid x:Name="MyGrid"
             ItemsSource="{Binding Path=MyItems}"
             AutoGenerateColumns="True"
             SelectionMode="Extended"
             RowDetailsVisibilityMode="VisibleWhenSelected">

  <dg:DataGrid.RowDetailsTemplate>
    <DataTemplate>
      <TextBlock Text="Further Details..."/>
    </DataTemplate>
  </dg:DataGrid.RowDetailsTemplate>
  ...
</dg:DataGrid>

不幸的是,對於這個應用程序來說,在“selected”行上顯示行的詳細信息並不直觀,客戶想要點擊多行的複選框來顯示RowDetails窗格,而且還要滾動選擇其他行的網格。 換句話說,無論DataGrid上發生什麼,修復顯示RowDetails的行。

所以目前滾動關閉他們打開的RowDetailsPanes。 我想要做的是有一個複選框的列中,並綁定RowDetails面板的可見性到這個屬性,但我想不出如何做到這一點。 問題很簡單,RowDetailsPane只對datagrid中的行選擇進行操作 - 是否可以擴展某種方式來操作我選擇的屬性?

在此先感謝,威爾




Related