我有一个数据网格,RowDetialsVisibilityMode
设置为VisibleWhenSelected
,并且相应地设置了RowDetailsTemplate。当用户选择一行时,显示详细信息,这与描述完全相同。但是,在查看详细信息之后,用户希望再次隐藏行详细信息而不显示另一行的详细信息。如何最好地完成。
更新:正如评论中所提到的,可能最好的选项是细节行中的一个按钮来隐藏行,但后来我想知道绑定会是什么样的?
答案 0 :(得分:3)
由于此功能是基于表示的,因此我会为按钮创建一个行为,该行为会折叠行
public class CollapseRowAction : TriggerAction<ButtonBase>
{
public CollapseRowAction() {}
protected override void Invoke(object o)
{
var dg = FindVisualParent<DataGrid>(this.AssociatedObject);
if (dg != null)
dg.SelectedIndex = -1;
}
private static T FindVisualParent<T>(DependencyObject child) where T : DependencyObject
{
DependencyObject parentObject = VisualTreeHelper.GetParent(child);
if (parentObject == null) return null;
T parent = parentObject as T;
if (parent != null)
{
return parent;
}
else
{
return FindVisualParent<T>(parentObject);
}
}
}
在XAML中:
<sdk:DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<!--... However row details are presented ...-->
<Button Margin="10" Content="Collapse">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<myTriggers:CollapseRowAction/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</DataTemplate>
</sdk:DataGrid.RowDetailsTemplate>