如何隐藏数据网格细节行

时间:2011-03-01 18:50:23

标签: silverlight mvvm-light

我有一个数据网格,RowDetialsVisibilityMode设置为VisibleWhenSelected,并且相应地设置了RowDetailsTemplate。当用户选择一行时,显示详细信息,这与描述完全相同。但是,在查看详细信息之后,用户希望再次隐藏行详细信息而不显示另一行的详细信息。如何最好地完成。

更新:正如评论中所提到的,可能最好的选项是细节行中的一个按钮来隐藏行,但后来我想知道绑定会是什么样的?

1 个答案:

答案 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>