次のシナリオを検討してください。
を使用して に
ListViewバインドされている があります。ObservableCollectionDataContext<ListView ItemsSource="{Binding}">データを
class含む は、このメカニズムを使用して、表示されたコンテンツをデータ コレクションと同期させます。stringDependencyPropertyListView編集可能な列が1つあります(これを達成するために、ここのチュートリアルに従いました)。theListViewItemは aTextBlockまたは a のいずれかTextBoxです。これは、1 つのリソースDataTemplateと 2 つの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)、ユーザーに対してデータを別の方法で表現する方法はありますか (検索結果が太字になるようにするため)。バインディングを手動で管理すると、おそらくきれいになるでしょうか?