考虑以下场景:
我有一个
ListView绑定到ObservableCollection使用的DataContext:<ListView ItemsSource="{Binding}">class包含string数据使用该机制DependencyProperty使显示的内容与数据集合保持同步。ListView有一个可编辑的列(我按照这里的教程来实现这一点);ListViewItem然后是 a或TextBlockaTextBox。这是使用一个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)并且仍然以不同的方式向用户表示数据(以便搜索匹配可能是粗体)?如果我手动管理绑定,也许会更干净?