C# 绑定和支持富文本格式
考虑以下场景:C# 绑定和支持富文本格式,c#,wpf,listview,binding,.net-4.5,C#,Wpf,Listview,Binding,.net 4.5,考虑以下场景: 我有一个列表视图,它使用数据上下文绑定到一个可观察集合: 包含字符串数据的类使用dependencProperty机制保持显示内容与数据采集同步 ListView有一列是可编辑的(我按照教程实现了这一点);ListViewItem则是TextBlock或TextBox。这是使用一个DataTemplate和两个Style资源完成的 我想根据搜索字符串格式化TextBlock中显示的字符串。具体地说,我希望在用户在搜索查询中键入匹配项时,将列表视图的项目设置为粗体(只有顺序匹
- 我有一个
,它使用列表视图
绑定到一个数据上下文
:可观察集合
包含
数据的字符串
使用类
机制保持显示内容与数据采集同步dependencProperty
有一列是可编辑的(我按照教程实现了这一点);ListView
则是ListViewItem
或TextBlock
。这是使用一个TextBox
和两个DataTemplate
资源完成的Style
- 我想根据搜索字符串格式化
中显示的字符串。具体地说,我希望在用户在搜索查询中键入匹配项时,将TextBlock
列表视图的项目设置为粗体(只有顺序匹配的字符才应设置为粗体)。这只需要为当前使用
呈现的文本显示(即,当前未编辑的文本)TextBlock
IMultiValueConverter
,它引用呈现数据的TextBlock
,这样我就可以适当地格式化文本。但是,这将破坏我设置的绑定:
searchFormatter
是包含搜索查询的IMultiValueConverter
和txtSearch
文本框
我仍在学习WPF,所以我不熟悉最佳方法或可能的方法。是否有办法保持数据绑定(以便编辑反映在集合和
列表视图中),并且仍然以不同的方式向用户表示数据(以便搜索匹配可以是粗体)?如果我手动管理绑定,可能会更干净?我决定使用支持HTML的控件,这样我就可以使用IValueConverter
动态更新显示文本的值,而不影响任何活动绑定。我使用了中的代码并对其进行了修改,使其看起来像我的列表视图中的文本块
:
BorderBrush=画笔。透明;
SelectionBrush=画笔。透明;
游标=游标。箭头;
边界厚度=新厚度(0);
背景=画笔。透明;
但是,我仍然需要触发IValueConverter
,以便在用户在搜索查询中键入代码时更新显示:
ICollectionView视图=CollectionViewSource.GetDefaultView(ItemsSource);
view.Refresh();
我不想减慢搜索过程,所以我只在有匹配的情况下(或者有匹配的状态变为无匹配的情况下)才强制刷新。MyIValueConvertor
只需插入粗体标记以匹配搜索查询:
其中searchFormatter
这次是一个IValueConvertor