我使用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()开火?
答案 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;
}