WPF CollectionView.CurrentChanged事件在加载时触发

时间:2013-11-28 08:30:16

标签: wpf combobox collectionview

我有一个WPF应用程序,我在ViewModel构造函数中设置了一些组合框。 我填充组合框然后设置CurrentChanged EventHandler,但每次视图加载此事件都会被触发。 我希望能够阻止在加载时触发CurrentChanged事件。

这是我的ViewModel构造函数。

public MyViewModel()
    { 
        this.Initialize();
        carNames = new CollectionView(GetCarNames());//method that returns a List<string> collection
        companyNames = new CollectionView(GetCompanyNames());//method that returns a List<string> collection
        carNames.CurrentChanged += new EventHandler(carNames_CurrentChanged);
        companyNames.CurrentChanged += new EventHandler(companyNames_CurrentChanged);  
    }

这是我的一个EventHandler。

void carNames_CurrentChanged(object sender, EventArgs e)
    {
        if ((sender as CollectionView).CurrentItem != null)
        {
            //Do Something          
        }
    }

最后,我认为这是我的组合框。

<ComboBox Margin="5"
       SelectedValue="{Binding Path=SelectedCar}"  
       ItemsSource="{Binding carNames}"
       IsSynchronizedWithCurrentItem="True"
       x:Name="cmbCar" />

所以我的问题是!如何在视图加载时阻止我的EventHandler被触发。

感谢任何帮助。

干杯。

诺尔

1 个答案:

答案 0 :(得分:1)

为了避免在加载时调用处理程序,您需要确保在加载视图后设置它。您的ViewModel如何实例化?如果它适合您的设计,您可以在视图加载后创建它,但我不建议使用该选项。

更好的选择 - 尽管不是很优雅 - 可能是将(OneWayToSource)绑定到ComboBox.IsLoaded属性,并在ViewModel绑定属性更改为true时设置处理程序。

作为替代方案,您难道不能仅仅关注SelectedCar属性的更改并执行您的逻辑吗?