Кнопка «Развернуть / Свернуть» в сетке данных Silverlight 5 с привязкой к родственнику Ancestor - PullRequest
1 голос
/ 08 января 2012

Я нашел несколько статей о реализации развёртывания / свертывания в SL3 и SL4, которые фактически являются обходными решениями для отсутствующей «Связки с родственниками Ancestor».Итак, теперь SL5 отсутствует, и я хотел бы знать, как это сделать в SL5.

Вот ответ для SL4: Кнопка «Развернуть / Свернуть» в сетке данных Silverlight

1 Ответ

2 голосов
/ 08 января 2012

С SL5 RelativeSource это легко сделать:

<sdk:DataGrid ItemsSource="{Binding Items}" 
   AutoGenerateColumns="False" 
   RowDetailsVisibilityMode="Collapsed">
   <sdk:DataGrid.Resources>
     <SL5:VisibilityToBoolConverter x:Key="converter"/>
   </sdk:DataGrid.Resources>
   <sdk:DataGrid.Columns>
      <sdk:DataGridTemplateColumn>
         <sdk:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
              <ToggleButton Content="Expand" 
                  IsChecked="{Binding Path=DetailsVisibility, 
                  Mode=TwoWay, 
                  RelativeSource={RelativeSource AncestorType=sdk:DataGridRow},
                  Converter={StaticResource converter}}"/>
            </DataTemplate>
          </sdk:DataGridTemplateColumn.CellTemplate>
       </sdk:DataGridTemplateColumn>
   </sdk:DataGrid.Columns>
</sdk:DataGrid>

Но для его работы вам понадобится конвертер Visibity в Boolean:

public class VisibilityToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
        CultureInfo culture)
    {
        Visibility visibility = (Visibility)value;
        return (visibility == Visibility.Visible);
    }

    public object ConvertBack(object value, Type targetType, object parameter,
        CultureInfo culture)
    {
        bool visibility = (bool)value;
        return visibility ? Visibility.Visible : Visibility.Collapsed;
    }
}
...