У меня есть программа, в которой я меняю коллекцию элементов, отображаемых в comboBox
. Я говорил об этом раньше в this question. Во всяком случае, я использую пользовательскую коллекцию прямо сейчас, потому что observableCollection
не имеет свойства selectedItem
. У пользовательской коллекции есть свойство selectedItem
, но я просто не знаю, как ее установить, чтобы данные были сохранены.Как использовать выбранный элемент в пользовательской коллекции
Пользовательские коллекции Class
public class MyCustomCollection<T>: ObservableCollection<T>
{
private T _mySelectedItem;
public MyCustomCollection(IEnumerable<T> collection) : base(collection) { }
public T MySelectedItem
{
get { return _mySelectedItem; }
set
{
if (Equals(value, _mySelectedItem)) return;
_mySelectedItem = value;
OnPropertyChanged(new PropertyChangedEventArgs("MySelectedItem"));
}
}
}
ViewModel - Где я могу изменить коллекцию в comboBox
и установите selectedItem
для каждой коллекции
//Property for the selected command in the LIST BOX
//**For clarity: the collection in the comboBox is changed based on what is
//selected in the list box
public string SelectedCommand
{
get { return _selectedCommand; }
set
{
_selectedCommand = value;
NotifyPropertyChange(() => SelectedCommand);
if (SelectedCommand == "1st Collection of type A")
{
ComboBoxEnabled = true;
ComboBoxList = new MyCustomCollection<string>(collectionA);
//collectionA.MySelectedItem = ??(What would I put here?)
}
if (SelectedCommand == "2nd Collection of type A")
{
ComboBoxEnabled = true;
ComboBoxList = new MyCustomCollection<string>(collectionA);
//collectionA.MySelectedItem = ??(What would I put here?)
}
}
}
Как бы присвоить значение MySelectedItem
для каждой новой коллекции, которую я создаю и добавляю к comboBox
? Это сделает так, что всякий раз, когда я переключаюсь на другую коллекцию в comboBox
, будет отображаться selectedItem
.
UPDATE
Мои коллекции теперь установлены в качестве ObservableCollection<string>
.
XAML для ListBox
и ComboBox
<ListBox ItemsSource="{Binding Model.CommandList}" SelectedItem="{Binding Model.SelectedCommand}" ... />
<ComboBox ItemsSource="{Binding Model.ComboBoxList}" SelectedItem="{Binding Model.SelectedOperation}" ... />
** Новый SelectedCommand
недвижимость под ListBox
:
public string SelectedCommand
{
get { return _selectedCommand; }
set
{
_selectedCommand = value;
NotifyPropertyChange(() => SelectedCommand);
switch (SelectedCommand)
{
case "Collection A":
{
ComboBoxList = CollectionA;
break;
}
case "Collection B":
{
ComboBoxList = CollectionB;
break;
}
}
NotifyPropertyChange(() => ComboBoxList);
}
}
Программа по-прежнему не держит selectedItem
, который выбран для каждой коллекции. Должно быть, я забыл или не понял чего-то.
Не уверен, что я понимаю, почему вы решили реализовать пользовательский 'ObservableCollection'. Вы можете привязать свой 'ComboBox' к коллекции, а также к выбранному элементу' ' –
Я знаю это, и это работает. Но коллекция 'comboBox' и' selectedItem' зависят от того, какая команда выбрана в 'listBox'. Таким образом, 'selectedItem' не зависит от одного набора для каждого окна, которое оно существует. –
Итак, позвольте мне понять, что вы хотите «ComboBox», когда вы меняете его коллекцию (я предполагаю, выбирая какой-то элемент в списке), это 'SelectedItem' становится ... что? –