2012-06-21 4 views
1

У меня есть поле со списком объектов, связанное с ObservableCollection. RadioButton позволяет пользователю выбирать режим. для каждого режима в выпадающем списке должен быть доступен выделенный список differnt.Combobox ItemsSource Binding (MVVM) - как я могу сбросить ItemsList

Моя проблема с использованием Observablecollection заключается в том, что после инициализации общедоступного наблюдаемого набора, его изменение только путем «Очистить все» и «Добавить новый список» по элементам.

Это очень неэффективно и вызывает проблемы с проверками, которые у меня есть на выбранном элементе.

Можете ли вы предложить другой метод, который позволит мне восстановить источник элементов, чтобы он обновлялся в пользовательском интерфейсе без удаления/добавления?

ответ

2

очень простой подход:

class VM 
{ 
    private ObservableCollection mode1; 
    private ObservableCollection mode2; 

    //view binds to this 
    public ObservableCollection<T> X { get; private set; } 

    //changing radiobutton invokes this 
    public void ChangeMode(mode) 
    { 
    if(mode == 1) 
     X = mode1; 
    else if(mode == 2) 
     X = mode2; 
    else 
     X = null; 
    } 
} 

не проверял, но должно работать; если в пользовательском интерфейсе нет изменений после смены режима, вы должны вызвать RaisePropertyChanged(...) для X до возврата ChangeMode. Кроме того, если вы не добавить/удалить в списке нет реальной необходимости в ObservableCollection, вместо этого вы можете просто использовать List<T>

+0

Просто примечание: Если вы используете 'List ' в 'Mode' на' Binding' необходимо изменить с 'OneWay' на' TwoWay'. – Willem

+0

Спасибо. Нет ... это не работает. Выполняется только инициализация X. Это правда, мне не нужен наблюдаемый коллектив, и мы заменили его на простой список и подменим PropertyChanged после назначения. – yhollander

+0

Будет проверять это предложение TwoWay, а также – yhollander