在带有DataView的WPF DataGrid中,我们希望在单击之前将组合框显示为标签

本文关键字:组合 标签 显示 单击 我们 DataView WPF DataGrid 希望 | 更新日期: 2023-09-27 18:05:02

所以我们有一个WPF DataGrid,在一些有外部关系的单元格中有一些组合框,但这意味着我们一次加载了数百个组合框,这需要很长时间。我们想做的是加载一个标签,直到它被点击,然后加载一个组合框,我们可以很容易地用一个TextBox来做到这一点。

问题是,我们的组合框工作并允许用户通过从许多显示值(例如{Car, Dog, Cat})中进行选择来更改列中的外键值。但是在用户单击标签之前,标签本身会显示外键值(例如{1,2,3})。

有什么好主意吗?任何帮助,最感谢!

<DataGridTemplateColumn Header="Column Name" SortMemberPath="Column Name"> 
    <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate>
            <Label Content="{Binding Path=DataViewBehindColumnName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
        <DataTemplate> 
           <ComboBox 
            DataContext="{DynamicResource ResourceKey=ViewModel}" 
            ItemsSource="{Binding Path=ReferenceTableName, 
                         Converter={StaticResource dataViewToListConverter}}" 
            DisplayMemberPath="ReferenceTableDisplayNamesColumn" 
            SelectedValuePath="ReferenceTablePrimaryKeyColumn" 
            SelectedValue="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, 
                           Path=Item[DataViewBehindColumnName]}"
            />
        </DataTemplate> 
     </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

亲切的问候,河豚

在带有DataView的WPF DataGrid中,我们希望在单击之前将组合框显示为标签

每行创建一个ViewModel,并在其中提供一个表示解析字符串值的属性和另一个表示键的属性。将标签的Content-property绑定到string-property,将组合框的SelectedValue绑定到key-property。

不是MVVM:创建一个行项包装器,其中包含数据网格所需的所有属性,包括包含有问题属性的已解决字符串值的属性。

当我读到你的文章时,我想到了两件事

1)数据网格虚拟化。这可以节省一些负载。

2a)用bool属性"ShowData"为数据对象构建代理。默认情况下为false,并在单击控件时设置为true。你可以用commandBinding来做。如果不使用ORM,可以扩展DataSet sourccode并添加此功能。然而,这最终可能会成为一项繁重的工作。

2b)组合框有一个可编辑的模板和一个不可编辑的模板(你可以很容易地在Blend中找到它们)。绑定不可编辑模板的内容,以显示静态字符串和可编辑的字符串到关系。这将只在您尝试编辑selectedItem时显示您的关系。同样,如果你使用像NHibernate这样的ORM,你可以从LazyLoading特性中获益。