ControlTemplateで使用されるValueConverterをパラメーター化する良い方法は何ですか?
-
05-07-2019 - |
質問
私が取り組んでいるテンプレートコントロールは、次のようにValueConverterを使用します。
<ListBox>
<ListBox.Resources>
<Controls:CodeDescriptionValueConverter x:Key="CodeDescriptionValueConverter"/>
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource CodeDescriptionValueConverter}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
これは、generic.xamlで提供するデフォルトの外観です。このコントロールを使用するときは、さまざまな形式の文字列をコンバーターに渡します。完全なControlTemplateを提供せずにそれを実現する方法はありますか?
最初に考えたのは、ConverterParameterをコントロールのプロパティにTemplateBindingで使用できるということでしたが、ConverterParametersをバインドできないことを発見しました。別のオプションは、ConvertToメソッドからコントロールにアクセスし、そのプロパティを選択することです。どうすればいいのかわかりません。コントロールを使用するたびにコントロールを完全に再テンプレートする必要がなくなるオプションは役に立ちます(多くのXamlです)。
解決
これらの状況では、通常、次の2つのいずれかを実行します。
1)書式文字列にバインドする両方のプロパティにアクセスできるオブジェクトにバインドします。コンバータでは、プロパティとフォーマット文字列の両方にアクセスできます。
2)フォーマット文字列とフォーマットされたテキストのプロパティをデータオブジェクト/ビューモデル/などに追加します。次に、書式設定されたテキストプロパティにバインドします。 INotifyPropertyChangedを使用していると仮定すると、テキストまたは書式文字列のプロパティを変更するたびに、書式設定されたテキストプロパティのpropertychangedイベントを発生させる必要があることに注意してください
所属していません StackOverflow