Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定和支持富文本格式_C#_Wpf_Listview_Binding_.net 4.5 - Fatal编程技术网

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();
我不想减慢搜索过程,所以我只在有匹配的情况下(或者有匹配的状态变为无匹配的情况下)才强制刷新。My
IValueConvertor
只需插入粗体标记以匹配搜索查询:


其中
searchFormatter
这次是一个
IValueConvertor