4

J'essaie le cadre caliburn.micro pour un nouveau projet mais je suis coincé avec la liaison d'un ListPicker (celui de la boîte à outils). Lorsque je change le contrôle en DropDown simple, tout fonctionne comme prévu. Je suppose que le menu déroulant fonctionne correctement, en raison de la convention par défaut mis en œuvre here:caliburn.micro convention de liaison pour ListPicker sur WP7

AddElementConvention<Selector>(Selector.ItemsSourceProperty, "SelectedItem", "SelectionChanged") 
    .ApplyBinding = (viewModelType, path, property, element, convention) => { 
     if (!SetBinding(viewModelType, path, property, element, convention)) 
      return false; 

     ConfigureSelectedItem(element, Selector.SelectedItemProperty,viewModelType, path); 
     ApplyItemTemplate((ItemsControl)element, property); 

     return true; 
    }; 

Le ListPicker ne pas implémenter de sélection, donc j'ai essayé d'ajouter une convention personnalisée dans mon bootstrapper:

static void AddCustomConventions() { 
    AddElementConvention<ListPicker>(ListPicker.ItemsSourceProperty, "SelectedItem", "SelectionChanged") 
     .ApplyBinding = (viewModelType, path, property, element, convention) => { 
      ConventionManager.ConfigureSelectedItem(element, ListPicker.SelectedItemProperty,viewModelType, path); 
      return true; 
     }; 
} 

Malheureusement, cela ne fonctionne pas. Pouvez-vous aider?

Répondre

8

J'ai résolu mon problème avec cette convention.

ConventionManager.AddElementConvention<ListPicker>(ListPicker.ItemsSourceProperty, "SelectedItem", "SelectionChanged") 
    .ApplyBinding = (viewModelType, path, property, element, convention) => 
    { 
     if (ConventionManager.GetElementConvention(typeof(ItemsControl)).ApplyBinding(viewModelType, path, property, element, convention)) 
     { 
      ConventionManager.ConfigureSelectedItem(element, ListPicker.SelectedItemProperty, viewModelType, path); 
      return true; 
     } 
     return false; 
    }; 

De plus, il y avait un autre problème. Ma propriété SelectedItem a renvoyé null mais ma propriété Items ne contenait pas de valeur null. J'ai une exception: l'élément sélectionné n'est pas valide, car il ne figure pas dans la liste.

Questions connexes