3

我正在使用RowDetailsTemplate其中一个DataGrids. 到目前为止,这工作得很好,但是当用户想要为特定操作选择多行时看起来真的很奇怪。是否有一种简单的方法来显示RowDetailsTemplate仅当仅选择一行时?

我很想用纯 XAML 解决这个问题。否则我会用后面的代码来做:

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    DataGrid temp = sender as DataGrid;

    if (temp.SelectedItems.Count == 1)
    {
        temp.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.VisibleWhenSelected;
    }
    else
    {
        temp.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.Collapsed;
    }
}
4

2 回答 2

2

DataGrid 有一个属性RowDetailsVisibilityMode。选择多行时将其设置为折叠。您的 XAML 应该类似于

<DataGrid Name="dataGrid1" RowDetailsVisibilityMode="{Binding Path=SelectedItems.Count, RelativeSource={RelativeSource Self}, Converter={StaticResource rdtvc}}">

和相应的转换器,如

public class Converter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {

        if (value != null && (int)value == 1)
            return DataGridRowDetailsVisibilityMode.VisibleWhenSelected;
        else 
            return DataGridRowDetailsVisibilityMode.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2014-05-26T12:08:31.070 回答
2

根据 user1994514 的回答,我开发了一个仅 XAML 的版本,无需转换器。如果有人想避免使用额外的转换器,您可以使用带有数据触发器的样式来实现相同的效果。

    <DataGrid>
        <DataGrid.Style>
            <Style TargetType="DataGrid">
                <Setter Property="RowDetailsVisibilityMode" Value="Collapsed" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding SelectedItems.Count, RelativeSource={RelativeSource Self}}" Value="1">
                        <Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.Style>
    </DataGrid>
于 2018-07-10T08:02:41.853 回答