2015-02-13 3 views
0

Я использую код от http://www.c-sharpcorner.com/uploadfile/1a81c5/multi-select-combobox-in-wpf/, и он отлично работает. Одно дополнение, которое я пытаюсь сделать, вызывает действие над SelectionChanged.Обновление списка с MultiSelectComboBox

Я попытался

<src:MultiSelectComboBox ItemsSource="{Binding TargetGroups}" 
          SelectedItems="{Binding SelectedTargetGroups, Mode=TwoWay}" 
          cal:Message.Attach="[Event SelectionChanged]=[Action Filter()]" 
          HorizontalAlignment="Left"> 
</src:MultiSelectComboBox> 

Но это не всегда огонь. Я также добавил Filter() в SelectedTargetGroups, но он не получает уведомления об изменениях выбора.

private Dictionary<string, object> _selectedTargetGroups 
public Dictionary<string, object> SelectedTargetGroups 
{ 
    get { return _selectedTargetGroups; } 
    set 
    { 
     _selectedTargetGroups = value; 
     Filter(); 
     OnPropertyChanged("SelectedTargetGroups"); 
    } 
} 

Могу ли я спросить, как получить фильтр() для стрельбы?

+0

Ожидаете ли вы, что словарь будет заменен на новый словарь или что предметы будут добавлены в словарь? В настоящее время ваш код будет поднимать событие OnPropertyChanged, когда для SelectedTargetGroups назначается совершенно новый словарь istannce. – NextInLine

+0

Элементы, которые нужно добавить в словарь, Когда я установил точки останова SelectedTargetGRoups никогда не срабатывает, когда я выбираю элементы из MultiSelectComboBox – Master

ответ

0

Это похоже на проблему в коде третьей стороны, которую вы используете. MultiSelectComboBox.SetSelectedItems() только, кажется, создает словарь в первый раз. Поскольку словари не реализуют INotifyCollectionChanged, вы не можете видеть отдельные обновления; вы увидите только обновление этого первого элемента. Вместо этого вы, вероятно, захотите изменить этот код на:

private void SetSelectedItems() 
    { 
     var selectedItems = new Dictionary<string, object>(); 
     foreach (Node node in _nodeList) 
     { 
      if (node.IsSelected && node.Title != "All") 
      { 
       if (this.ItemsSource.Count > 0) 

        selectedItems.Add(node.Title, this.ItemsSource[node.Title]); 
      } 
     } 
     // this should now result in a call to the SelectedTargetGroups setter you have 
     SelectedItems = selectedItems; 
    } 
+0

Hi NextInLine Я определенно думаю, что вы на правильном пути, но он все равно не сообщил об изменениях = ( – Master

+0

Ну, если эта проблема существует в этом коде, то я подозреваю, что есть и другие. Вы подтвердили с помощью контрольных точек, что вы нажимаете линию «новый словарь» выше? – NextInLine

Смежные вопросы