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