WPF:DataGrid.RowDetailsTemplate:仅在选择单行时显示详细信息?

Posted

技术标签:

【中文标题】WPF:DataGrid.RowDetailsTemplate:仅在选择单行时显示详细信息?【英文标题】:WPF: DataGrid.RowDetailsTemplate: Only show details if single row is selected? 【发布时间】:2014-07-15 04:23:15 【问题描述】:

我在我的DataGrids 之一中使用RowDetailsTemplate。到目前为止,这工作得很好,但是当用户想要为特定操作选择多行时看起来真的很奇怪。 有没有一种简单的方法来显示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;
    

【问题讨论】:

【参考方案1】:

DataGrid 有一个属性RowDetailsVisibilityMode。选择多个行时将其设置为折叠 em>。 您的 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();
    

【讨论】:

...最好的方法是什么?我很想在 XAML 中做到这一点,但我想不出一个合适的方法来做到这一点...... 哇...对我有用。谢谢!【参考方案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>

【讨论】:

以上是关于WPF:DataGrid.RowDetailsTemplate:仅在选择单行时显示详细信息?的主要内容,如果未能解决你的问题,请参考以下文章

wpf窗体阴影

WPF 精修篇 Winform 嵌入WPF控件

wpf 用啥字体

wpf 添加动态图片

wpf编程 求大神指导如何用WPF制作一个论坛。。。!!急!!!

wpf和winform的区别