【解決方法】グレー表示になっているか、リストビュー項目の選択ができなくなっていますか?


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

VB
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 イベントの組み合わせを使用してリストビュー項目を無効にする別の例です。 項目をグレーアウトする方法についても説明があります。

c# – C# – .net 3.5のリストビューコントロールの項目を無効にする方法[^]

解決策 5

とても遅くなりましたが、他の人にとっても役立つかもしれません:)

MVVM を使用して、ListViewItem の IsHitTestVisible プロパティをビジネス オブジェクトのプロパティにバインドする必要があります。

例:
clsMyClass オブジェクトのリストがあり、リストの ItemsSource として使用されます。
クラス clsMyClass にはブール型プロパティ IsSelectable があります。
XAML は次のようになります。

この方法では、IsSelectable=False を持つ項目はヒット テストに表示されなくなります。つまり、ListView はマウス イベントをインターセプトせず、クリックされた項目は選択されません。

注: 選択中に Ctrl+A や Shift などのキーボード ショートカットを使用してすべての項目を選択できるため、この解決策は複数選択環境では完璧ではありません。

コメント

タイトルとURLをコピーしました