【发布时间】:2012-02-05 07:30:26
【问题描述】:
我发现了几篇关于在 SL3 和 SL4 中实现展开/折叠的文章,这些文章实际上是缺少“祖先相对源绑定”的解决方法。所以现在 SL5 出来了,我想知道 SL5 是如何做到的。
这是 SL4 的答案: Expand/Collapse button in a Silverlight DataGrid
【问题讨论】:
标签: c# silverlight data-binding datagrid silverlight-5.0
我发现了几篇关于在 SL3 和 SL4 中实现展开/折叠的文章,这些文章实际上是缺少“祖先相对源绑定”的解决方法。所以现在 SL5 出来了,我想知道 SL5 是如何做到的。
这是 SL4 的答案: Expand/Collapse button in a Silverlight DataGrid
【问题讨论】:
标签: c# silverlight data-binding datagrid silverlight-5.0
使用 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;
}
}
【讨论】: