как скрыть строку данных сетки данных - PullRequest
0 голосов
/ 01 марта 2011

У меня есть сетка данных с RowDetialsVisibilityMode, установленным на VisibleWhenSelected, и RowDetailsTemplate, установленным соответственно. Когда пользователь выбирает строку, отображается подробное описание, которое точно соответствует описанному. Однако после просмотра деталей пользователь хотел бы снова скрыть детали строки, не отображая детали другой строки. Как это лучше всего сделать.

Обновление: Как упоминалось в комментариях, вероятно, лучшим вариантом будет кнопка в строке сведений, чтобы скрыть строку, но тогда мне интересно, как будет выглядеть привязка?

1 Ответ

3 голосов
/ 01 марта 2011

Поскольку эта функция основана на представлении, я бы создал поведение для кнопки, которая свернет строку

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>
...