繁体   English   中英

Silverlight DataGrid标头绑定

[英]Silverlight DataGrid Header Binding

我正在使用HeaderStyle属性来自定义Silverlight DataGrid列标题。 有没有一种方法可以将ControlTemplate内的控件绑定到基于列索引的集合中的对象? 类似于以下内容?

<Style x:Key="GradeDefinitionHeaderStyle" TargetType="dataprimitives:DataGridColumnHeader">
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate>
            <TextBlock Text="{Binding MyCollection[i]}"/>                        
        </ControlTemplate>
    </Setter.Value>
</Setter>

在标题控件模板中:

<Grid>
    <Grid.Resources>
        <local:DataGridColumnBindingHelper x:Key="DataGridColumnBindingHelper"
                                           ElementInColumn="{Binding ., RelativeSource={RelativeSource TemplatedParent}"
                                           Items={Binding MyCollection} />
    </Grid.Resources>
    <TextBlock Text="{Binding CurrentItem, Source={StaticResource DataGridColumnBindingHelper}}"/> 
</Grid>

在DataGridColumnBindingHelper类内部:

private static void OnElementInColumnPropertyChanged(DataGridColumnBindingHelper self, FrameworkElement oldValue, FrameworkElement newValue)
{
    var column = DataGridColumn.GetColumnContainingElement(newValue);
    var dataGrid = newValue.GetVisualAncestors().OfType<DataGrid>().FirstOrDefault(); 
    if (dataGrid != null)
    {
        var columnIndex = dataGrid.Columns.IndexOf(column);
        self.CurrentItem = self.Items[columnIndex];
    }
}

请注意,绑定到MyCollection可能无法正常工作。 您可以使用自定义附加属性将所需的集合附加到XAML中定义的列,然后按以下方式在此处读取它(在DataGridColumnBindingHelper中):

private static void OnElementInColumnPropertyChanged(DataGridColumnBindingHelper self, FrameworkElement oldValue, FrameworkElement newValue)
{
    var column = DataGridColumn.GetColumnContainingElement(newValue);
    var dataGrid = newValue.GetVisualAncestors().OfType<DataGrid>().FirstOrDefault(); 
    if (dataGrid != null)
    {
        var columnIndex = dataGrid.Columns.IndexOf(column);
        var items = DataGridColProperties.GetItems(column); // read attached property
        self.CurrentItem = items[columnIndex]; // you do not need the Items property in this case
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM