2012-01-08 62 views

回答

2

随着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> 

但你需要一个VisibityBoolean转换器,使其工作:

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

谢谢,它是一种魅力。 – 2012-01-09 07:49:08