所以我正在动态构建一个silverlight数据网格(列和单元格),我需要我的用户能够更改列标题。我在DataGridColumnHeader.ContentTemplate上使用了一个带有绑定到Header(我认为)的TextBox的DataTemplate。
<DataTemplate xmlns='http://schemas.microsoft.com/client/2007'>
<TextBox Text='{Binding}' />
</DataTemplate>
但是,当我更改文本框的文本时,实际的标题值不会更改。我想我需要使用双向绑定,但我不确定这将如何工作。我一直在尝试围绕silverlight / wpf绑定,但我正在努力。
我想我可以使用textbox.textchanged事件来更新它们或类似的东西。但我认为它在xaml中会更干净。
有什么建议吗?我觉得有人必须创建一个带有可编辑列标题的DataGrid。
答案 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对象)在更改文本框文本时更改了值。这导致我的导出正确行为。谢谢你的帮助。