2009-05-06 10 views
14

の項目/インデックスを選択し、私はSystem.Windows.Controls.ListBoxは、プログラムのListBox WPFで

の選択インデックスを設定したいのですが、私がこれまでに見つけた私の最善の方法は、すべて削除することですコントロールから項目を選択し、SelectAll()をコールし、残りの部分を挿入しますが、この解決策は私の状況では機能しませんし、非常に効率的です。

リストボックスの項目をプログラムで選択するにはどうすればよいですか?

答えて

9

これを行う方法の1つは、選択したフィールドをデータオブジェクトに追加することです。次に、デフォルトのlistboxitemスタイルを上書きし、isselectedプロパティをオブジェクトのSelectedプロパティにバインドする必要があります。それから、データ項目を調べ、Selected値を更新するだけです。

Selectedプロパティを依存プロパティとして実装していない場合は、INotifyPropertyChangedインターフェイスを暗示し、値を設定するときにpropertychangedイベントを発生させるクラスが必要です。

+0

これは完全に機能しました。ありがとうございます! – Alex

+0

ありがとう!...これはうまくいきました。私は、以下で使用したコードセグメントを追加します。 –

+0

実際にはこれは以下のdanlashと比較すると複雑すぎます。 – henon

2

あなたはこれをしなければならない:itemIndexは、選択したい項目だろう

ListBoxObject.SelectedItem = ListBoxObject.Items.GetItemAt(itemIndex); 

。 複数の項目を選択する場合は、ListBox.SelectedIndexCollectionプロパティを使用する必要があります。

+1

System.Windows.Controls.ListBoxは、SelectedIndexCollectionプロパティを継承するSystem.Windows.Forms.ListBoxと似ていません – Alex

+0

私の悪いです。申し訳ありません。 – jgallant

+0

SelectedItemは引き続き動作します。 –

26

SelectedItemsコレクションを使用して複数のアイテムを選択して設定できます。これは、インデックスではありませんが、バインドされているものによって:

foreach (var boundObject in objectsBoundToListBox) 
{ 
    ListBox.SelectedItems.Add(boundObject); 
} 
+1

これは、アイテムが追加されるたびにSelectionChangedイベントを1回発生させます。シフトを使ってアイテムのグループを手動で選択すると、グループ全体に対して1回だけ呼び出されます。 – FreddyFlares

2

プログラムでWPFのmdm20へ

foreach (var boundObject in objectsBoundToListBox) 
{ 
    ListBox.SelectedItems.Add(boundObject); 
} 
+0

ありがとう、この岩! – henon

+5

実際にこのスレッドのdanlashからこれをカットアンドペーストしましたか? – Epirocks

1

感謝をリストボックスで複数の項目を選択する方法。 私のケースはListBox内のCheckBoxを実際にチェックしていましたが、この依存プロパティは魅力的に機能しました。 私はあなたが複数のセクションのためにこれを行うことができますDependencyObjectから私のカスタムクラスを継承しなければならなかったし、プロパティを実装

public class ProjectListItem : DependencyObject{ 

    public Boolean IsChecked 
    { 
     get { return (Boolean)this.GetValue(CheckedProperty); } 
     set { this.SetValue(CheckedProperty, value); } 
    } 
    public static readonly DependencyProperty CheckedProperty = 
     DependencyProperty.Register("IsChecked", typeof(Boolean), typeof(ProjectListItem), 
            new PropertyMetadata(false)); 
} 
1

私はアイテムのインデックスです
ListBoxObject.SelectedItems.Add(ListBoxObject.Items.GetItemAt(i)); 

関連する問題