チェックボックスをオンにしていますが、チェックボックスを複数選択する必要がありますが、リスト項目のハイライトバーは単一選択です。下記のコードでは、チェックボックスは複数選択されていますが、リストボックスにハイライトバーが表示されず、リストボックスから現在選択されているアイテムを確認することもできません。 (lbProtocols.SelectedItemsは常に0です)チェックリストボックスにハイライト表示されている項目がありません
何が欠けていますか?ここで
は、リストボックスのためのXAMLです:
<ListBox Name ="lbProtocols" ItemsSource="{Binding AvailableProtocols}">
<ListBox.ItemTemplate>
<HierarchicalDataTemplate>
<CheckBox Content="{Binding ProtocolName}" IsChecked="{Binding IsChecked}" />
</HierarchicalDataTemplate>
</ListBox.ItemTemplate>
</ListBox>
そして、ここでは、その背後にあるコードは、リストボックスに私の観察可能なコレクションをバインドしている:ここでは
public ObservableCollection<CheckedListItem> AvailableProtocols;
AvailableProtocols = new ObservableCollection<CheckedListItem>();
CheckedListItem item1 = new CheckedListItem(0, "first", false);
item1.IUPropertyChanged += new PropertyChangedEventHandler(item_IUPropertyChanged);
CheckedListItem item2 = new CheckedListItem(1, "second", true);
item2.IUPropertyChanged += new PropertyChangedEventHandler(item_IUPropertyChanged);
CheckedListItem item3 = new CheckedListItem(3, "third", false);
item3.IUPropertyChanged += new PropertyChangedEventHandler(item_IUPropertyChanged);
AvailableProtocols.Add(item1);
AvailableProtocols.Add(item2);
AvailableProtocols.Add(item3);
lbProtocols.ItemsSource = AvailableProtocols;
はCheckedListItemクラスです:
public class CheckedListItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangedEventHandler IUPropertyChanged;
public CheckedListItem(){ }
public CheckedListItem(int id, string name, bool check)
{
ID = id;
ProtocolName = name;
IsChecked = check;
}
public int ID { get; set; }
public string ProtocolName { get; set; }
private bool _IsChecked;
public void SetCheckedNoNotify(bool check)
{
_IsChecked = check;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("IsChecked"));
}
public bool IsChecked
{
get { return _IsChecked; }
set
{
_IsChecked = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("IsChecked"));
if (IUPropertyChanged != null)
IUPropertyChanged(this, new PropertyChangedEventArgs("IsChecked"));
}
}
}
設定だろうか?また、コードビハインドからItemsSourceを設定している場合は、XAMLでバインディングを設定する必要はありません。 –