2011-03-01 9 views
0

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

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

+0

Вы хотите кнопку в строковые данные, которые разрушают детали строки? – foson

ответ

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> 
+0

На самом деле это не совсем так, как ожидалось. Как только мы задаем свойство DetailsVisibility явно, строка больше не ведет себя в соответствии с параметром DataGrid.RowDetailsVisibilityMode, который установлен на VisibleWhenSelected. Предложения? –

+0

Я сделал это в реальной жизни, создав столбец с кнопкой +/- toggle, чтобы переключать детали строки. Я установил RowDetialsVisibilityMode в Collapsed, тогда я либо установил поведение кнопки, чтобы переключаться взад и вперед от Collapsed to Visible, либо в кодовом замке создавал привязку между кнопкой IsPressed и функцией Row's DetailsVisibility (с использованием ValueConverter) (должен быть в коде, а не XAML, пока SL5 не выйдет с более сильной привязкой RelativeSource). Знал блог об этом ... – foson

+0

Я отредактировал ответ, чтобы отменить выбор строки, тем самым скрыв детали строки, вместо того, чтобы изменять DetailsVisibility, которая, как вы сказали, не работает. – foson

Смежные вопросы