2010-07-09 3 views
2

J'ai un contrôle utilisateur WPF avec une zone de liste. Je veux passer l'élément sélectionné dans la zone de liste au contrôle appelant via la liaison. Comment puis-je atteindre cet objectif?Passage de la sélection du contrôle utilisateur WPF au contrôle de l'hôte

+0

Vous voulez dire le transmettre au contrôle parent dans lequel réside votre contrôle utilisateur? Utilisez-vous MVVM? Comment remplissez-vous votre zone de liste? S'il vous plaît fournir autant de détails que possible et du code (xaml dans votre usercontrol), il sera facile de vous fournir une réponse correcte. – akjoshi

+0

Oui, j'espère que vous utilisez une forme de MVVM ou une variante de modèle de présentation, donc vous pouvez lier votre liste de contrôle utilisateur SelectedItem à une propriété du modèle, qui est ensuite exposée à votre contrôle parent (qui s'y connecte). –

Répondre

1

Vous pouvez exposer une nouvelle propriété pour SelectedItem sur votre contrôle utilisateur et la lier au contrôle ListBox enfant.

code pour votre contrôle utilisateur (I hérité de contrôle bien):

public class CustomListControl : Control 
{ 
    static CustomListControl() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomListControl), new FrameworkPropertyMetadata(typeof(CustomListControl))); 

     SelectedItemProperty = ListBox.SelectedItemProperty.AddOwner(typeof(CustomListControl)); 
    } 

    public static readonly DependencyProperty SelectedItemProperty; 

    public Object SelectedItem 
    { 
     get { return this.GetValue(SelectedItemProperty); } 
     set { this.SetValue(SelectedItemProperty, value); } 
    } 
} 

Et ajouter la liaison de la zone de liste intérieure à votre UserControl dans le balisage generic.xaml:

<ListBox 
    SelectedItem="{Binding RelativeSource={RelativeSource AncestorLevel=1, AncestorType={x:Type local:CustomListControl},Mode=FindAncestor},Path=SelectedItem, Mode=TwoWay}" 
</ListBox> 
Questions connexes