2

itemsSource実行時に aを変更しようとしてcomboBoxいます。この質問では、comboBox.itemssource.... 私がする必要があるのは、新しいものを作成してからcomboBoxコマンドを呼び出すことだけであれば、それで問題ありません。ただし、comboBoxxaml を介してユーザー コントロールに既に存在する に対してこの操作を実行する必要があります。その場合、どのように参照すればよいでしょうか。コントロール内のプロパティにバインドする方法は知っていますが、この場合はコントロール全体を取得する必要があります。私はそれを考えすぎていますか?私が考えていることを行うための最良の方法は何ですか?

これは、現在コレクションを切り替える方法ですcomboBox(これはすべてモデルレベルです):

//Property for Combo Box List
public ObservableCollection<string> ComboBoxList
{
    get { return _comboBoxList; }
    set
    {
        if (Equals(value, _comboBoxList)) return;
        _comboBoxList = value;
        OnPropertyChanged("ComboBoxList");
    }
}

public string SelectedCommand
{
    get { return _selectedCommand; }
    set
    {
        _selectedCommand = value;
        NotifyPropertyChange(() => SelectedCommand);

        if (SelectedCommand == "String Value")
        {
            ComboBoxList = new ObservableCollection<string>(newList);
        }
    }
}

この実装を使用するとコレクションが切り替わりますが、は固執selectedItemcomboBoxません。たとえば、別のコマンドをクリックしてから元に戻すと、ボックスにselectedItem.

アップデート

selectedOperationにバインドされているというプロパティがありますcomboBox。これには、単純なゲッターとセッターが含まれており、NotifyPropertyChange. これによりselectedItem、ボックス内の が選択されたままになります。しかし、ユーザーが別のコマンドをクリックして で別の項目を選択するとcomboBox、その新しい項目が代わりに使用されます。selectedItemが保持するfor each コレクションを持つことができる必要がありcomboBoxます。

例えば:

に A と Bの 2 つのコマンドがあるとしますlistBox。それぞれが に異なるコレクションを作成しますcomboBox。A は数値のコレクションを作成し、B は名前のコレクションを作成します。

コマンド A の場合、ユーザーは 5 を選択します。A を選択すると、comboBoxは 5 を表示するはずselectedItemです。A -> 5

コマンド B では、ユーザーは Roger を選択します。B を選択すると、comboBoxはそのまま「ロジャー」と表示されselectedItemます。B -> ロジャー

現在、はユーザーがいつコマンドを切り替えたcomboBoxかを記憶していません。selectedItem

4

2 に答える 2