【发布时间】:2012-11-11 05:49:00
【问题描述】:
考虑以下场景:
-
我有一个使用
DataContext绑定到ObservableCollection的ListView:<ListView ItemsSource="{Binding}">包含
string数据的class使用DependencyProperty机制来保持显示的内容与数据集合同步。 -
ListView有一列是可编辑的(我按照教程here 来实现这一点);然后ListViewItem是TextBlock或TextBox。这是使用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 中)并且仍然以不同的方式向用户表示数据(以便搜索匹配可能是粗体)?如果我手动管理绑定可能会更干净?
【问题讨论】:
标签: c# wpf listview binding .net-4.5