在DataGrid中创建自定义列标题 - 绑定问题

时间:2011-09-16 12:52:13

标签: c# silverlight-4.0 datagrid

我正在尝试为我的通用DataGrid中的某些列创建自定义标头;我希望这些标题包含一个文本框,我可以用它来对数据应用fiters。

这是我到目前为止所做的:

    <Style x:Key="ColumnHeaderStyle"  TargetType="dataprimitives:DataGridColumnHeader">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding}"/>
                        <TextBox Width="Auto" Tag="{Binding Path=Tag}" LostFocus="TextBox_LostFocus" TextChanged="TextBox_TextChanged" MinWidth="50"/>
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

这是我目前正在使用的标题所使用的样式。这是代码生成,它为标题提供有关创建的适当数据:

    private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
         (...)
         e.Column.Header = new { Text = e.Column.Header, Tag = e.PropertyName };
         e.Column.HeaderStyle = Resources["ColumnHeaderStyle"] as Style;
         (...)
    }

运行应用程序时,列的TextBlock将包含以下内容:{ Text = Description, Tag = Description }

因此,我希望绑定的Path=Tag部分有效,但是,当TextChanged事件被点击时,标记为null

我做错了什么?

1 个答案:

答案 0 :(得分:0)

显然使用匿名类型不适用于XAML和绑定...这很奇怪,因为它使用反射,据我所知。

创建一个简单的公共类来存储数据并使用它而不是匿名类型解决了这个问题。