我在TabItem中托管了一个ComboBox。当我从ComboBox中选择一个项目时,会填充一个合适的ListView。当我离开TabItem然后返回时,ComboBox中的SelectedItem为空,但ListView仍然正确填充。尚未引发SelectedItemChanged事件。
为什么返回查看时,ComboBox中未显示所选项目?
一些代码: 在视图---
<ComboBox x:Name="customersComboBox"
ItemsSource="{Binding Path=Customers }"
SelectedItem="{Binding Path=SelectedCustomer, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Code"
IsEditable="False">
在ViewModel中 -
public ICustomerInfo SelectedCustomer
{
get { return (ICustomerInfo)GetValue(SelectedCustomerProperty); }
set { SetValue(SelectedCustomerProperty, value); }
}
// Using a DependencyProperty as the backing store for SelectedCustomer. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectedCustomerProperty =
DependencyProperty.Register("SelectedCustomer", typeof(ICustomerInfo), typeof(OrdersViewModel), new UIPropertyMetadata(null, SelectedCustomerChanged));
private static void SelectedCustomerChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d==null)
{
return;
}
OrdersViewModel viewModel = d as OrdersViewModel;
if (e.NewValue == null)
{
return;
}
ICustomerInfo selectedCustomer = e.NewValue as ICustomerInfo;
viewModel.SelectedCustomerChanged(selectedCustomer);
}
private void SelectedCustomerChanged(ICustomerInfo selectedCustomer)
{
if (selectedCustomer != null)
{
if (!GetOrders())
{
return;
}
}
}
答案 0 :(得分:1)
我已经知道发生了什么。
当Tab失去焦点时,会引发SelectedItemChanged事件!我想我理解导致事件被引发的机制,但我不明白为什么它需要发生 - 显然它是“按设计”。
发生的事情是e.NewValue为null,我的代码没有更改为新值,但SelectedItem WAS设置为null。
编程错误,但TabItem(及其子控件)的奇怪行为让我感到沮丧!
答案 1 :(得分:0)
set EnabledViewState=true
然后发布一些代码,以便我能识别错误。