2009-03-19 4 views
0

je tente de factoriser comme XAML en introduisant nouveau contrôle utilisateur:Refactor Code XAML avec une liaison

<Window ...> 
    <ComboBox ItemsSource="{Binding Greetings}" /> 
</Window> 

Après avoir ajouté un contrôle je

ControlA XAML:

<UserControl ...> 
    <ComboBox ItemsSource="{Binding Items}" /> 
</UserControl> 

ControlA C#:

public static readonly DependencyProperty ItemsProperty = 
    WpfUtils.Property<IEnumerable, ControlA>("Items"); 

public IEnumerable Items { get; set; } 

Nouveau Fenêtre XAML:

<Window ...> 
    <uc:ControlA Items="{Binding Greetings}" /> 
</Window> 

Après cela, je ne vois rien dans ComboBox. Quel est le problème ici?

Répondre

0

Votre zone de liste déroulante est liée au DataContext. Étant donné que votre DataContext est encore un objet avec une liste appelée Bonjour, cela ne fonctionnera pas ...

Votre ContolA devrait ressembler à quelque chose comme ceci:

<UserControl x:Name="Root" ...> 
    <ComboBox ItemsSource="{Binding ElementName=Root, Path=Items}" /> 
</UserControl> 

Maintenant, votre combobox se lie à la propriété Items de votre ControlA, au lieu de votre propriété DataContext ...

Espérons que cela aide ..

+0

J'ai eu this.DataContext = this; dans les contrôles code-behind. Ajout de Racine et nouvelle ComboBox comme vous l'avez suggéré, mais obtenez toujours des cases vides. – alex2k8

+0

Gotcha, définissant 'this.DataContext = this;' écrasé le contexte de la fenêtre principale. – alex2k8

Questions connexes