WPF ListBox DataContextChanged触发SelectionChanged

时间:2015-09-16 07:36:36

标签: wpf listbox datacontext selectionchanged

我有一个包含扩展器的用户控件。解释器的内容是绑定到对象的ListBox,DataTemplate正确显示它。问题是:用户可以选择一个Listbox项,SelectionChanged处理程序将ListBox的DataContext更改为所选对象。

像这样:

<ListBox 
    Name="RelativesLB" ItemsSource="{Binding Relatives}", 
    ItemsTemplate ="{...}",
    Selectionchanged="Relatives_OnSelectionChanged" />

Relatives_OnSelectionChanged(object sender, ...EventArgs e)
{
    var who = (sender as ListBox).SelectedItem as Person;
    if (who == null)
        return;

    People.DataContext = who;

问题在于:

  1. SelectionChanged事件触发。
  2. DataContext已更改,ListBox重新填充。
  3. SelectionChanged事件触发SelectedItem = null。在这里,我的代码不会更改DataContext;它只是回归。
  4. SelectionChanged事件再次以SelectedItem = <whatever is first>触发。在这里,我的代码再次将DataContext更改为该项我不想要这一点。实际上,我想在2之后停止。
  5. Datacontext已更改为<whatever is first>

  6. ...
    依此类推,直到我们得到一个空Person.Relatives,然后我们停止。

  7. 我想要的是在第一次DataContext更改后停止。您从person集合中选择Relatives,然后获取该人的观看次数。

    如何停止随后的SelectionChanged事件触发?

1 个答案:

答案 0 :(得分:0)

我想,你在Relatives_OnSelectionChanged上需要设置

e.Handled = True;