如何在silverlight 4 datagrid中创建可编辑的列标题?

时间:2011-08-18 01:37:19

标签: silverlight binding datagrid

所以我正在动态构建一个silverlight数据网格(列和单元格),我需要我的用户能够更改列标题。我在DataGridColumnHeader.ContentTemplate上使用了一个带有绑定到Header(我认为)的TextBox的DataTemplate。

<DataTemplate xmlns='http://schemas.microsoft.com/client/2007'>
    <TextBox Text='{Binding}' />
</DataTemplate>

但是,当我更改文本框的文本时,实际的标题值不会更改。我想我需要使用双向绑定,但我不确定这将如何工作。我一直在尝试围绕silverlight / wpf绑定,但我正在努力。

我想我可以使用textbox.textchanged事件来更新它们或类似的东西。但我认为它在xaml中会更干净。

有什么建议吗?我觉得有人必须创建一个带有可编辑列标题的DataGrid。

1 个答案:

答案 0 :(得分:0)

好吧我修好了。所以我刚创建了一个字符串包装类,如下所示:

public class SingleString:System.ComponentModel.INotifyPropertyChanged
{
    String _value = "";
    public String Value
    {
        get { return _value; }
        set
        {
            _value = value;
            OnPropertyChanged("Value");
        }
    }

    public SingleString()
    {
    }
    public SingleString(String val)
    {
        Value = val;
    }

    public override string ToString()
    {
        return Value;
    }

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    }
}

然后我将这些对象类型用于我的列标题。所以我的标题样式就是:

    <Style x:Key="TextBoxHeader" TargetType="dataprimitives:DataGridColumnHeader">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBox Text="{Binding Value, Mode=TwoWay}"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

这导致Header值(SingleString对象)在更改文本框文本时更改了值。这导致我的导出正确行为。谢谢你的帮助。