2013-06-21 9 views
0

У меня есть приложение WPF с двумя ComboBox
Когда я выбираю первый из них предметы, связанные с первым списком будет заполняться на втором одномКак очистить выбранные элементы коллекции

Вот мой выбор недвижимости

public string SelectedApplication 
    { 
     set 
     { 
      if (_selectedApplication == value) return; 
      this._selectedApplication = value; 

      InitializeTransactionTypes(); 


     } 
     get 
     { 
      return this._selectedApplication; 
     } 

    } 

здесь я проверяю соответствующий идентификатор между двумя полями для заполнения вторых элементов списка.

ObservableCollection<TransactionTypeViewModel> _transTypeObsList = new ObservableCollection<TransactionTypeViewModel>(); 
     private void InitializeTransactionTypes() 
    { 
     if (_selectedApplication != null) 
     { 

       var getAppCode = 
       ApplicationVModel.GetAllApplications() 
           .FirstOrDefault(apps => apps.Name == _selectedApplication); 

      var transTypeList = TransactionTypeVModel.GetAllViewModelTransTypes() 
                .Where(t => getAppCode != null && t.Id == getAppCode.Id); 

      transactionTypes = new ObservableCollection<TransactionTypeViewModel>(transTypeList); 

      NotifyPropertyChanged("TransactionTypes"); 
     } 
    } 

Более подробную информацию о методах:

Список VM отображенный из Список модели

 public List<TransactionTypeViewModel> GetAllViewModelTransTypes() 
    { 
     TransactionTypeViewModels = TransactionTypeModel.GetAllTransactionTypes().Select(transType => new TransactionTypeViewModel 
     { 
      Id = transType.Id, 
      Name = transType.Name, 


     }) 
    .ToList(); 
     return TransactionTypeViewModels; 
    } 

Допустим, я выбираю первый выпадающий есть {A, B, C, D} ... а второй combobox имеет {A'1, A'2, A'3}, когда я выбираю элемент из первого Combobox, второй combobo продолжает заполнять элементов. Я хотел показать только {A'1 для A} {B'1 для B} ... и т. Д., Но теперь он делает это {A'1 A'1 A'1 ..... для A} {B ' 1 B'1 B'1 .... для B} для каждого выбора.

Я хочу, чтобы предыдущий выбор был очищен и отобразился новый список на выбор. Спасибо

+0

Вместо того, чтобы воссоздавать '_transTypeObsList' каждый раз, когда в' InitializeTransactionTypes' пытаются 'Clear() 'и' Добавить (...) 'элементы по одному. – dkozl

+1

быть понятным Я не знаю, если это проблема, но вы часто создаете свой список. Вместо этого 'transactionTypes = new ObservableCollection ....' делать что-то вроде 'transactionTypes.Clear(); foreach (....) transactionTypes.Add (....) ' – dkozl

+0

@dkozl Спасибо, что работает для меня ... Я очистился и добавил для каждой итерации. –

ответ

0

Подводя итоги, комментарии. Вместо того, чтобы создавать новый ObservableCollection каждый раз, когда что-то меняет повторное использование, которое у вас уже есть, и оно будет уведомлять пользовательский интерфейс об изменениях. Ваш InitializeTransactionTypes должен выглядеть примерно так:

private void InitializeTransactionTypes() 
{ 
    if (_selectedApplication != null) 
    { 
     var getAppCode = 
      ApplicationVModel.GetAllApplications() 
          .FirstOrDefault(apps => apps.Name == _selectedApplication); 

     transactionTypes.Clear(); 
     foreach(var transactionItem in TransactionTypeVModel.GetAllViewModelTransTypes().Where(t => getAppCode != null && t.Id == getAppCode.Id)) 
     transactionTypes.Add(transactionItem); 
    } 
} 

и как это вы не должны уведомлять о TransactionTypes изменений больше

+0

спасибо, что это хорошая точка –