使用MultiSelectComboBox更新列表

时间:2015-02-13 17:38:45

标签: c# wpf

我使用http://www.c-sharpcorner.com/uploadfile/1a81c5/multi-select-combobox-in-wpf/中的代码,它运行正常。我试图做的一个补充就是在SelectionChanged上触发一个动作。

我已经尝试了

<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");
    }
}

请问如何让Filter()开火?

1 个答案:

答案 0 :(得分: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;
    }