2010-10-14 6 views
0

J'ai un ComboBox hébergé dans un TabItem. Lorsque je sélectionne un élément de la zone de liste déroulante, un ListView approprié est rempli. Lorsque je m'éloigne du tabItem et puis revenez, le SelectedItem dans le ComboBox est vide, mais le ListView reste correctement rempli. L'événement SelectedItemChanged n'a pas été déclenché.ComboBox SelectedItem change lorsque le parent TabItem perd le focus

Pourquoi l'élément sélectionné n'apparaît-il pas dans la zone de liste déroulante lorsque je reviens l'afficher?

Certains code: Dans la vue ---

   <ComboBox x:Name="customersComboBox" 
           ItemsSource="{Binding Path=Customers }" 
           SelectedItem="{Binding Path=SelectedCustomer, UpdateSourceTrigger=PropertyChanged}" 
           DisplayMemberPath="Code" 
           IsEditable="False"> 

Dans le 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

Je suggérerais de poster du code. Bien qu'il puisse sembler que la réponse est évidente pour les gens sur SO, ce n'est pas le cas. Je sais que c'est généralement difficile avec les grands projets, surtout si vous n'avez * aucune idée * où l'erreur est. –

Répondre

1

J'ai compris ce qui se passait. Lorsque l'onglet perd le focus, l'événement SelectedItemChanged est déclenché!

Je pense que je comprends le mécanisme qui provoque l'événement, mais je ne comprends pas pourquoi cela doit se produire - apparemment, c'est «par conception».

Ce qui se passait, c'est que le e.NewValue était nul et mon code ne changeait pas pour les nouvelles valeurs mais le SelectedItem était mis à null.

Erreur de programmation mais le comportement étrange du TabItem (et ses contrôles enfants) m'avait flumoxed!

0
set EnabledViewState=true 

puis après un peu de code, afin que je puisse reconnaître l'erreur.

+1

Ceci est un problème WPF. – hayrob

Questions connexes