时间:2010-07-26 14:26:02

标签: silverlight xaml

1 个答案:

答案 0 :(得分:3)

可能你已经解决了这个问题,但不过:

<navigation:Page.Resources>
    <model:MyModel x:Key="Model"/>
</navigation:Page.Resources>
...    
<data:DataGridTemplateColumn Width="Auto" >
    <data:DataGridTemplateColumn.HeaderStyle>
        <Style TargetType="datap:DataGridColumnHeader">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <CheckBox IsThreeState="True" Margin="2,0,-13,0" DataContext="{StaticResource Model}" IsChecked="{Binding Path=AllChecked, Mode=TwoWay}"/>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </data:DataGridTemplateColumn.HeaderStyle>
    <data:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding Checked, Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </DataTemplate>
    </data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>

MyModel类包含实现选择逻辑的bool?属性。它也用作页面的“DataContext”。

我必须承认,如果我们需要改变模型,这可能会有问题。

编辑:我发现了另一种方式:

<navigation:Page.DataContext>
    <model:MyModel />
</navigation:Page.DataContext>
...    
<data:DataGridTemplateColumn Width="Auto" >
    <data:DataGridTemplateColumn.HeaderStyle>
        <Style TargetType="datap:DataGridColumnHeader">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <CheckBox IsThreeState="True" Margin="2,0,-13,0" IsChecked="{Binding Path=DataContext.AllChecked, ElementName=LayoutRoot, Mode=TwoWay}"/>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </data:DataGridTemplateColumn.HeaderStyle>
    <data:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding Checked, Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </DataTemplate>
    </data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>

这里我们绑定到根布局元素的DataContext(通常称为LayoutRoot),它默认从页面继承其数据上下文。