質問

WPFで、System.Windows.Controls.ListBoxの選択されたインデックスを設定したい

これまでのところ、コントロールからすべてのアイテムを削除し、選択したものを挿入し、SelectAll()を呼び出し、残りを挿入するのが最善の方法です。しかし、このソリューションは私の状況では機能せず、非常に効率的でもありません/ p>

では、リストボックス内のアイテムをプログラムで選択するにはどうすればよいですか

役に立ちましたか?

解決

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

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

他のヒント

SelectedItemsコレクションを使用して、複数のアイテムを選択済みとして設定できます。これはインデックスによるものではなく、バインドしたものによるものです。

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

wpfのリストボックスで複数のアイテムをプログラムで選択する方法

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

これを行う必要があります:

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

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

mdm20に感謝します。 私の場合、実際には ListBox 内の CheckBox をチェックしていましたが、このDependencyプロパティは魅力のように機能しました。 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));
}

複数のセクションに対してこれを行うことができます:

ListBoxObject.SelectedItems.Add(ListBoxObject.Items.GetItemAt(i));

iはアイテムインデックスです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top