2010-02-10 7 views
0

J'ai un ListBox contenant CheckBoxes. XAML ressemble à ceci:WPF: Comment lier des objets différents?

<ListBox x:Name="lbContactTypes"> 
    <ListBox.ItemTemplate> 
     <HierarchicalDataTemplate> 
      <CheckBox Content="{Binding Path=Description}" IsChecked="{Binding Path=ContactTypes, Converter={x:Static Classes:ListContainsConverter.Instance}, ConverterParameter=1}" /> 
     </HierarchicalDataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Je lie ItemsSource dans mon code comme ceci:

lbContactTypes.ItemsSource = GetLeadContactTypes(); 

Jusqu'à présent, si bon. Trois cases à cocher sont générées avec un contenu correct. Maintenant, je voudrais définir la propriété IsChecked à un autre objet qui contient les données actuelles pour l'entité avec laquelle je travaille. Pour clarifier un peu, j'ai défini DataContext de la fenêtre à l'objet Customer qui contient entre autres ObservableCollection de ContactTypes et je voudrais lier ces ContactTypes à la propriété IsChecked afin que les cases à cocher soient vérifiées. Je vérifie si le ObservableCollection contient l'entier désiré en appelant le convertisseur de ListContainsConverter qui retourne bool. Est-ce possible?

Répondre

0

J'ai trouvé une solution à cela. Je lié IsChecked à Window.DataContext, de sorte que le XAML ressemble à ceci:

<ListBox x:Name="lbContactTypes"> 
    <ListBox.ItemTemplate> 
     <HierarchicalDataTemplate> 
      <CheckBox Content="{Binding Path=Description}" IsChecked="{Binding Path=DataContext.ContactTypes, RelativeSource={RelativeSource AncestorType={x:Type Window}}, Converter={x:Static Classes:ListContainsConverter.Instance}, ConverterParameter=1}" /> 
     </HierarchicalDataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

je serais toujours intéressé de savoir si une meilleure solution existe. Faites le moi savoir.

Questions connexes