我使用WPF DataGrid
来显示DataTable
' s。
我需要能够编辑这个绑定的DataTables(双向绑定)。
我正在使用DataGrid:
<DataGrid SelectionUnit="CellOrRowHeader" IsReadOnly="False" AutoGenerateColumns="True" ItemsSource="{Binding Path=SelectedItem.BindableContent, FallbackValue={x:Null}}" />
我遇到的问题是,用户无法编辑ColumnHeader
的单元格内容或行。
下面的截图说明了这个问题。我唯一能做的就是对列进行排序。
有没有办法编辑列标题,例如当用户点击两次,或者按 F2 。
也许有些Style
&#39;还是HeaderTemplate
会做这个工作?我已经尝试了一些我在互联网上找到的样式和控件模板,但没有任何成功。
我设法在AutogeneratingTextcolumn事件处理程序中的TextBox
(而不是TextBlock
)中显示列标题:
private void _editor_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) {
// First: create and add the data template to the parent control
DataTemplate dt = new DataTemplate(typeof(TextBox));
e.Column.HeaderTemplate = dt;
// Second: create and add the text box to the data template
FrameworkElementFactory txtElement =
new FrameworkElementFactory(typeof(TextBox));
dt.VisualTree = txtElement;
// Create binding
Binding bind = new Binding();
bind.Path = new PropertyPath("Text");
bind.Mode = BindingMode.TwoWay;
// Third: set the binding in the text box
txtElement.SetBinding(TextBox.TextProperty, bind);
txtElement.SetValue(TextBox.TextProperty, e.Column.Header);
}
但是我无法正确设置绑定,如果我编辑TextBox中的Text,它不会更改Column.Header
- Property中的文本(由绑定自动生成)如上所述的DataTable
。
答案 0 :(得分:1)
您忘记设置绑定的来源,并且在绑定注册后不得设置该值。正确的代码如下:
private void asdf_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
DataTemplate dt = new DataTemplate(typeof(TextBox));
e.Column.HeaderTemplate = dt;
FrameworkElementFactory txtElement =
new FrameworkElementFactory(typeof(TextBox));
dt.VisualTree = txtElement;
Binding bind = new Binding();
bind.Path = new PropertyPath("Header");
bind.Mode = BindingMode.TwoWay;
// set source here
bind.Source = e.Column;
txtElement.SetBinding(TextBox.TextProperty, bind);
// You mustn't set the value here, otherwise the binding doesn't work
// txtElement.SetValue(TextBox.TextProperty, e.Column.Header);
}
此外,您必须将绑定属性更改为Header
,因为您要将绑定添加到TextBox的text属性。