2011-06-08 4 views
1

J'essaie de remplir une zone de liste déroulante, qui fait partie d'un objet, avec une liste d'éléments (ParentCredentials). Le problème est que ces ParentCredentials sont au même niveau que les éléments liés à itemscontrol. Je ne sais pas si cela est clair, mais si vous avez un regard sur le modèle de vue, il devrait être plus compréhensibleLier une zone de liste déroulante à un élément

Ceci est mon viewmodel:

public class AccessControlViewModel : INotifyPropertyChanged 
    { 
public ObservableCollection<LogonCredential> Credentials 
     {...} 
    public List<string> ParentCredentials 
     {...} 
} 

et j'ai le XAML suivant.

<ItemsControl ItemsSource="{Binding AccessControl.Credentials}" HorizontalContentAlignment="Stretch"> 
     <ItemsControl.ItemTemplate> 
     <DataTemplate>        
      <Grid > 
       <Grid.ColumnDefinitions > 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions>          

      <Label Grid.Column="0" Content="{Binding Path=DisplayName}"/> 
      <ComboBox Grid.Column="2" ItemsSource="{Binding Source={RelativeSource AncestorType={x:Type vm:ResourceViewModel}}, Path=AccessControl.ParentCredentials}">           
      </ComboBox> 
      ... 

Comment puis-je effectuer cette liaison? Notez également qu'AccessControl fait partie de la classe ResourceViewModel.

Répondre

2

Vous devez retourner à ItemsControl et lier via le chemin DataContext.

{Binding RelativeSource={RelativeSource AncestorType=ItemsControl}, Path=DataContext.AccessControl.ParentCredentials} 

Source={RelativeSource... ne fonctionne jamais dans tous les cas. En outre, AncestorType est toujours un objet FrameworkElement plutôt qu'un objet de données.

Questions connexes