【发布时间】:2014-05-26 14:16:46
【问题描述】:
我已经搜索了很长时间,但无法弄清楚如何覆盖 DataGridComboBoxColumn 中的自动完成功能。
我想做的是这里解释的,除了一个组合框:Searching for items in a list box
即:我希望能够输入任何字符串,然后对 DataGridComboBoxColumn 中的 ComboBox 项应用过滤器,以仅将与此匹配的那些项显示为子字符串。
我是 WPF 新手,已经在网上搜索了一段时间。我找到了诸如 EventSetters 和 CommandBehaviorCollection.Behaviors 之类的东西,但我无法清楚地了解可能性(和不可能性)。
我有:
<DataGrid ... >
...
<DataGrid.Columns>
...
<MyCustomDataGridComboBoxColumn Header="My Header" MinWidth="200" >
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding DataContext.MyData, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
<Setter Property="SelectedItem" Value="{Binding DataItem, UpdateSourceTrigger=LostFocus, ValidatesOnDataErrors=True}" />
<Setter Property="DisplayMemberPath" Value="HardwareId" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding DataContext.MyFilteredData, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
<Setter Property="SelectedItem" Value="{Binding DataItem, UpdateSourceTrigger=LostFocus}" />
<Setter Property="DisplayMemberPath" Value="HardwareId" />
<Setter Property="IsEditable" Value="True"/>
<Setter Property="Text" Value="{Binding DataContext.MyNewDataItem, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, UpdateSourceTrigger=LostFocus, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</MyCustomDataGridComboBoxColumn>
...
</DataGrid.Columns>
</DataGrid>
理想情况下,我想创建一个继承自 DataGridComboBoxColumn 的新类,并为其提供一些自定义逻辑,例如在其构造函数中提供一个匿名函数,以便将来可以以不同的方式覆盖自动完成行为。
这有可能吗,还是我完全走错了路?
【问题讨论】:
标签: c# wpf mvvm combobox autocomplete