[ad_1]
Hi all I have a ListView populated with several items (ListViewItem) items. I want to do 2 things with these items. 1) I want to prevent some items from being selected (based on some critera that I define).
私が試したこと:
listview1.item.selected=false
listview1.SelectedItem.Selected=false
解決策 1
調べたところ、リストビュー項目を選択不可に設定することはできません。
他にできること。
a) ItemSelectionChanged のイベント ハンドラーを追加し、そこで処理します。
b) チェックボックスを使用し、ItemCheck/ItemChecked イベントのイベント ハンドラーを追加します。
敬具
解決策 2
これは、を使用した非常に簡単な解決策です。 選択されたインデックスが変更されました ListBox コントロールのイベント ハンドラー。
これは無効なインデックスであるため、インデックスが -1 より大きいことを確認しています (-1 は何も選択されていないことを意味します)。 必要に応じてこれを変更できますが、現状のスニペットでは、「選択できません」という値を持つリストボックス項目をクリックすると、選択されているすべての項目がクリアされます。 このイベント ハンドラーは必要に応じて使用してください。
ヒント: アイテムの背景色を変更します :p
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged If ListBox1.SelectedIndex > -1 And ListBox1.Items(ListBox1.SelectedIndex) = "I can't be selected" Then ListBox1.ClearSelected() End If End Sub
解決策 3
以下は、チェックボックスとItemCheck イベントの組み合わせを使用してリストビュー項目を無効にする別の例です。 項目をグレーアウトする方法についても説明があります。
解決策 5
とても遅くなりましたが、他の人にとっても役立つかもしれません:)
MVVM を使用して、ListViewItem の IsHitTestVisible プロパティをビジネス オブジェクトのプロパティにバインドする必要があります。
例:
clsMyClass オブジェクトのリストがあり、リストの ItemsSource として使用されます。
クラス clsMyClass にはブール型プロパティ IsSelectable があります。
XAML は次のようになります。
この方法では、IsSelectable=False を持つ項目はヒット テストに表示されなくなります。つまり、ListView はマウス イベントをインターセプトせず、クリックされた項目は選択されません。
注: 選択中に Ctrl+A や Shift などのキーボード ショートカットを使用してすべての項目を選択できるため、この解決策は複数選択環境では完璧ではありません。
[ad_2]
コメント