考虑以下场景:
我有一个
ListView
绑定到ObservableCollection
使用的DataContext
:<ListView ItemsSource="{Binding}">
class
包含string
数据使用该机制DependencyProperty
使显示的内容与数据集合保持同步。ListView
有一个可编辑的列(我按照这里的教程来实现这一点);ListViewItem
然后是 a或TextBlock
aTextBox
。这是使用一个DataTemplate
和两个Style
资源完成的。- 我想
TextBlock
根据搜索字符串格式化显示的字符串。具体来说,如果有匹配项,我想将 的项目格式化为ListView
粗体,因为用户在他们的搜索查询中键入(如果有匹配项)(只有按顺序匹配的字符才应该变为粗体)。这只需要为当前正在使用 呈现的文本TextBlock
(即当前未编辑的文本)显示。
我考虑过使用IMultiValueConverter
一个引用来TextBlock
呈现数据的 ,以便我可以适当地格式化文本。但是,这将破坏我设置的绑定:
<TextBlock.Text>
<MultiBinding Converter="{StaticResource searchFormatter}" ConverterParameter="{x:Reference Name=txtSearch}">
<MultiBinding.Bindings>
<Binding Path="NameOfBoundDependencyProperty"/>
<Binding RelativeSource="{RelativeSource Self}"/>
</MultiBinding.Bindings>
</MultiBinding>
</TextBlock.Text>
searchFormatter
是IMultiValueConverter
和txtSearch
是TextBox
包含搜索查询。
我仍在学习 WPF,所以我不熟悉最好的方法或可能的方法。有没有办法保持数据绑定(以便编辑反映在集合和 中ListView
)并且仍然以不同的方式向用户表示数据(以便搜索匹配可能是粗体)?如果我手动管理绑定,也许会更干净?