2009-07-16 6 views
2

J'ai trouvé des articles concernant ces questions sur SO, mais ils ne me satisfont pas. Ils parlent de INotifyProperyChanged, mais cela n'aide pas dans mon cas. Je porte un Combobox. Pour le ItemsSource, j'utilise un MultiBinding et un Converter pour créer un ICollectionView. Le ICollectionView est lié au ItemsSource.Comment actualiser une liaison de la source d'éléments d'une liste déroulante par programme?

Sur l'événement GotFocus, cette liaison doit être actualisée pour que le convertisseur soit à nouveau déclenché.

Comment est-ce que je peux faire ceci?

Répondre

8

Ok, un collegue m'a aidé.

C'est la solution:

private void theComboBox_OnGotFocus(object sender, RoutedEventArgs e) 
{ 
    ComboBox theComboBox = sender as ComboBox; 

    if (theComboBox != null) 
    { 
     MultiBindingExpression binding = BindingOperations.GetMultiBindingExpression(theComboBox, ComboBox.ItemsSourceProperty); 
     if (binding != null) 
     { 
      binding.UpdateTarget(); 
     } 
    } 
} 
+1

chaque fois que je reçois la liaison comme nulle seulement ... j'avais déjà donné les itemsource ... –

+2

J'avais le mien réglé via ItemsSource, et en le mettant simplement à null et revenir à la collection originale a fait un rafraîchissement sans effets secondaires négatifs évidents. –

+1

Vous pouvez essayer ['BindingOperations.GetBindingExpression'] (http://msdn.microsoft.com/en-us/library/system.windows.data.bindingoperations.getbindingexpression.aspx) si vous obtenez null pour la liaison . – SliverNinja

0

Si vous pouvez accéder à votre ICollectionView dans votre code derrière, vous pourriez vouloir essayer la méthode Refresh ...

Hope this helps ..

+0

Cela ne nous aide pas. Cela rafraîchit ICollectionView, mais ICollectionView doit être recréé par le convertisseur. Donc, le convertisseur doit être refait. – Natrium

Questions connexes