如何在ItemsSource更改时将SelectedIndex保持为-1

时间:2014-02-21 15:37:11

标签: c# .net wpf xaml .net-4.0

我有Combobox这样的设置:

<ComboBox ItemsSource={Binding FilteredGroups} Name="cbo"/>

每次FilteredGroups对象更改时,SelectedIndex都会变为0,但我需要它转到-1。我目前的解决方法如下,但我很好奇是否有更好的方法来做到这一点:

 ViewModel.OnPropertyChanged += (o,e) => 
    {
        if(e.PropertyName == "FilteredGroups")
            _resetAdd = true;
    }

 cboOnSelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     if (_resetAdd && e.AddedItems.Count > 0)
         cbo.SelectedIndex = -1;
     else if(!_resetAdd && e.AddedItems.Count > 0)
      //Normal selection logic
     _resetAdd = false;
 }

我试图在XAML中设置SelectedIndex=-1,并绑定到我在VM上的一个对象,我在组更改期间将其设置为null。

如果有所不同,我也在使用ItemTemplate吗?

1 个答案:

答案 0 :(得分:0)

您可以在更改时听取任何DependencyProperty并从那里进行设置。

DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof (ComboBox)).AddValueChanged(cb, (s, e) => { cb.SelectedIndex = -1; });

不要忘记调用RemoveValueChanged以避免内存泄漏。