使用 DataTempülate 创建可编辑的 GridviewColumn

Posted

技术标签:

【中文标题】使用 DataTempülate 创建可编辑的 GridviewColumn【英文标题】:Creating editable GridviewColumn with DataTempülate 【发布时间】:2021-03-28 15:26:20 【问题描述】:

我有一个通过 ItemsSource 属性绑定到我的 ListView 的可观察集合。 我使用 GridView 来呈现 ListView 中的项目。 通过在我的 ViewModel 中将“IsServiceMode”属性设置为“true”(DataContext 到包含 ListView 的 UserControl),我想将 GridViewColumn 更改为使用 TextBox 而不是 Textblock。 我正在使用带有 ContentControl 和 DataTemplate 的 CellTemplates,如 here 所述

但是,尽管编辑器建议“位置”,但文本块和文本框控件中的“绑定位置”似乎不起作用。 Position 是绑定的 ObservableCollection 中项目的属性,可以通过 DisplayMemberBinding 毫无问题地使用。

我的 GridViewColumn

<GridViewColumn Header="Position">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ContentControl>
                                    <ContentControl.Style>
                                        <Style TargetType="x:Type ContentControl">
                                            <Style.Triggers>
                                                <DataTrigger Binding="Binding DataContext.IsServiceMode, RelativeSource=RelativeSource AncestorType=UserControl" Value="False">
                                                    <Setter Property="ContentTemplate">
                                                        <Setter.Value>
                                                            <DataTemplate>
                                                                <TextBlock Text="Binding Position, diag:PresentationTraceSources.TraceLevel=High"/>
                                                            </DataTemplate>
                                                        </Setter.Value>
                                                    </Setter>
                                                </DataTrigger>
                                                <DataTrigger Binding="Binding DataContext.IsServiceMode, RelativeSource=RelativeSource AncestorType=UserControl" Value="True">
                                                    <Setter Property="ContentTemplate">
                                                        <Setter.Value>
                                                            <DataTemplate>
                                                                <TextBox Text="Binding Position"/>
                                                            </DataTemplate>
                                                        </Setter.Value>
                                                    </Setter>
                                                </DataTrigger>
                                            </Style.Triggers>
                                        </Style>
                                    </ContentControl.Style>
                                </ContentControl>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>´´´


【问题讨论】:

您可以使用文本框并将只读甚至启用的属性绑定到 IsServiceMode,而不是所有这些?它还会大大简化您的 xaml。 @XAMlMAX 是的,但文本框看起来不同。 【参考方案1】: Datagrid 带有编辑模式。 IsReadOnly 处于打开和关闭状态。 itemSource 必须在启用编辑模式时实现 INotifyCollectionChanged。就像 ObservableCollection 一样

演示

        <DataGrid 
            x:Name="DataGrid1" 
            ItemsSource="Binding Path=ObservableCollection"
            IsReadOnly="Binding Path=IsServiceMode" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Position" Binding="Binding Path=Position,Mode=TwoWay"/>
            </DataGrid.Columns>
        </DataGrid>

【讨论】:

以上是关于使用 DataTempülate 创建可编辑的 GridviewColumn的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 创建 API 请求并接收带有 - 'Ä' 'Ö' 'Ü' 'ß' 的字符串

file文件

Late April|Blockchain and Beauty

如何从锚标记内提交我的 x 可编辑字段值以及我的表单/提交内容?

G++ 编译,可执行文件无法运行

使用 NSCoding 创建用户可编辑的 Plist