在带有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>
亲切的问候,河豚
每行创建一个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特性中获益。