为datagrid.columns创建一个样式

时间:2011-04-01 06:57:45

标签: wpf templates xaml binding

我还在努力做点什么。我在互联网上看到的所有示例都在datagrid本身的资源中应用了datagrid.columns。我不希望这样。我想在window.resources中定义一个模板或样式,它必须通过绑定应用于datagrid。我可以,我该怎么做?这是我控制资源中的xaml:

        <DataGrid Name="dgFruit" ItemsSource="{Binding}" AutoGenerateColumns="false" Style="{StaticResource datagrid}" >
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Path=Name}" Header="Name"/>
                <DataGridTextColumn Binding="{Binding Path=Color}" Header="Color"/>
                <DataGridCheckBoxColumn Binding="{Binding Path=Mjummy}" Header="Mjummy"/>
                <DataGridTextColumn Binding="{Binding Path=Number}" Header="Number"/>
                <DataGridTextColumn Binding="{Binding Path=Pits.Count}" Header="Pits"/>
            </DataGrid.Columns>
        </DataGrid>

1 个答案:

答案 0 :(得分:2)

据我所知,你不能这样做,因为DataGrid.Columns属性没有set-accessor,否则可以使用Setter在Style中设置。

您只能直接设置列,不能使用集合绑定它们。

这是一个非常迂回和丑陋的方式来获得多个网格中的相同列:

资源:

<x:Array x:Key="MyColumns" Type="{x:Type DataGridColumn}">
    <DataGridTextColumn Binding="{Binding Path=Name}" Header="Name"/>
    <DataGridTextColumn Binding="{Binding Path=Color}" Header="Color"/>
    <DataGridCheckBoxColumn Binding="{Binding Path=Mjummy}" Header="Mjummy"/>
    <DataGridTextColumn Binding="{Binding Path=Number}" Header="Number"/>
    <DataGridTextColumn Binding="{Binding Path=Pits.Count}" Header="Pits"/>
</x:Array>

的Datagrid:

<DataGrid ... Loaded="dataGrid_Loaded"/>

事件:

private void dataGrid_Loaded(object sender, RoutedEventArgs e)
{
    DataGridColumn[] columns = Resources["MyColumns"] as DataGridColumn[];
    DataGrid dg = sender as DataGrid;
    dg.Columns.Clear();
    foreach (var item in columns)
    {
        dg.Columns.Add(item);
    }
}