私はWPFの新機能で、ListBox
コントロールを拡張する方法を理解しています。学習の経験として、ListBoxItem
がCheckBox
と表示されているListBox
を作成したかっただけです。 ListBox.ItemTemplate
を使用して基本的な方法で作業しています。データバインドするプロパティの名前を明示的に設定します。ListBox.ItemTemplateを再利用/汎用にする方法
public class MyDataItem {
public bool Checked { get; set; }
public string DisplayName { get; set; }
public MyDataItem(bool isChecked, string displayName) {
Checked = isChecked;
DisplayName = displayName;
}
}
(私はそれらとそのリストにListBox.ItemsSource
セットのリストを作成します。)そして、私の例:私はデータバインディングのためのカスタムオブジェクトを持っている千個の言葉の価値があるので...
XAMLは次のようになります。
<ListBox Name="listBox1">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Checked}" Content="{Binding Path=DisplayName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
これは機能します。しかし、私はこのテンプレートを再利用可能にしたい、つまり、 "Checked"と "DisplayName"以外のプロパティを持つ他のオブジェクトにバインドしたいと思うでしょう。テンプレートを変更してリソースを作り、複数のListBox
インスタンスで再利用できるようにするにはどうすればいいですか?また、インスタンスごとに任意のプロパティ名にIsChecked
とContent
をバインドしますか?
私はこれが可能ではないと思います。 "Checked"バインディングを柔軟にするには、ListBoxをサブクラス化し、DisplayMemberPathのようなCheckedMemberPathを追加する必要があります。テンプレートだけではこれを行うことはできません。 –
それは私が恐れていたものです。私はListBoxのサブクラス化について検討し始めましたが、信じられないほどのテンプレートがどのようなものか、サブクラスを避ける必要があるかについては、テンプレートを使ってできる限り達成することができます。私はこれがサブクラスのために良いケースかもしれないと思います。ありがとう! –