我有一个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被触发。
感谢任何帮助。
干杯。
诺尔
答案 0 :(得分:1)
为了避免在加载时调用处理程序,您需要确保在加载视图后设置它。您的ViewModel如何实例化?如果它适合您的设计,您可以在视图加载后创建它,但我不建议使用该选项。
更好的选择 - 尽管不是很优雅 - 可能是将(OneWayToSource)绑定到ComboBox.IsLoaded属性,并在ViewModel绑定属性更改为true时设置处理程序。
作为替代方案,您难道不能仅仅关注SelectedCar属性的更改并执行您的逻辑吗?