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);
}
}
}
この実装を使用するとコレクションが切り替わりますが、は固執selectedItemしcomboBoxません。たとえば、別のコマンドをクリックしてから元に戻すと、ボックスに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