我正在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;
}
}
答案 0 :(得分:1)
DataGrid有一个属性 RowDetailsVisibilityMode 。选择多行时,将其设置为 Collapsed 。 您的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();
}
}
答案 1 :(得分:0)
基于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>