【问题标题】:Preserve default WPF DataGrid cell editing behaviour when using DataGridTemplateColumn使用 DataGridTemplateColumn 时保留默认的 WPF DataGrid 单元格编辑行为
【发布时间】:2013-01-09 08:38:09
【问题描述】:

我正在开发一个使用DataGrids 来显示数据的 WPF MVVM 应用程序。我手动定义列,大部分时间我使用DataGridTextColumn

当使用键盘导航生成的数据网格时,可以通过导航到单元格来突出显示该单元格,并且可以通过开始键入值来更改单元格值。此行为适用于DataGridTextColumn

在某些情况下,我必须使用DataGridTemplateColumn,对CellTemplateCellEditingTemplate 进行不同的绑定。这允许我格式化显示的值,但一旦用户开始编辑单元格,就会返回未格式化的值。但是,上面描述的键盘导航和编辑方法不适用于我当前的实现。我必须突出显示单元格并按 F2 进行编辑,或者我必须用鼠标单击单元格。

下面是我当前实现的模型,其中FooDataGridTextColumn 中工作正常,BarDataGridTemplateColumn 中,这给我带来了麻烦。

如何更改DataGridTemplateColumn 的定义,使其具有与DataGridTextColumn 相同的键盘导航和编辑功能?

<DataGrid ItemsSource="{Binding ListItems}">
    <DataGrid.Columns>

        <DataGridTextColumn Binding="{Binding Foo}"
                            Header="Foo" />

        <DataGridTemplateColumn Header="Bar">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ContentPresenter Content="{Binding Path=BarString, Mode=OneWay}"
                                      HorizontalAlignment="Right" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding BarValue, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"
                             HorizontalContentAlignment="Right" />
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>

    </DataGrid.Columns>
</DataGrid>

【问题讨论】:

    标签: wpf wpfdatagrid datagridtemplatecolumn


    【解决方案1】:

    我遇到了同样的问题,我希望数据网格在键盘上键入时开始编辑 我有一个解决方案,通过扩展 DataGrid 然后将 OnKeyDown 覆盖为 BeginEdit,如下所示:

        protected override void OnKeyDown(KeyEventArgs e)
        {
            Key[] ignorableKeys = { Key.Up, Key.Down, Key.Right, Key.Left, Key.Enter, Key.Escape };            
            if (!ignorableKeys.Any((x)=> x == e.Key))
            {
                BeginEdit();
            }
            base.OnKeyDown(e);
        }
    

    但是你会遇到另一个问题,你必须点击标签才能真正编辑单元格,我认为有很多关于这个问题的帖子,比如this

    【讨论】:

      【解决方案2】:

      您需要实现单击编辑来解决此问题。我有同样的问题,但不同的是我有一个需要编辑的复选框。这篇文章对我有帮助。检查一下:http://wpf.codeplex.com/wikipage?title=Single-Click%20Editing

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多