2010-09-02 22 views
0

J'ai une question courte:Reliure avec Relativesource --wpf

J'ai une datagrid et je l'ai liée à quelque chose. Puis-je mettre un combobox dans une colonne et binded à une autre source par

ItemsSource="{Binding DataContext.Users, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" 

Maintenant, je veux utiliser à nouveau la source de DataGrid, dans le combobox again.That code ne fonctionne pas maintenant et je sais qu'il ya un Colonne ID dans la source de datagrid.

SelectedValue="{Binding ID}" 

Comment puis-je résoudre ce problème? Merci d'avance.

Et voici mon DataGrid entier et la partie problématique est la liste déroulante.

<DataGrid ItemsSource="{Binding SCs}" SelectedItem="{Binding SelectedSC}" Margin="0,10,0,0" 
      RowStyle="{StaticResource ResourceKey=DataGridRowStyle}" Style="{DynamicResource ResourceKey=UILDataGridStyle}" AutoGenerateColumns="False" EnableRowVirtualization="True" 
      RowDetailsVisibilityMode="VisibleWhenSelected" Width="Auto" IsReadOnly="True" Background="Transparent" 
      VerticalAlignment="Stretch" HorizontalAlignment="Stretch" GridLinesVisibility="Vertical" VerticalGridLinesBrush="{DynamicResource ResourceKey=UILBorderBrush}" 
      RowHeaderWidth="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" BorderBrush="{DynamicResource ResourceKey=UILBorderBrush}" 
      BorderThickness="1" SelectionUnit="FullRow" SelectionMode="Single" x:Name="SCDataGrid"> 
     <DataGrid.Columns> 
      <DataGridTextColumn x:Name="securityConfigurationIDColumn" Binding="{Binding Path=SecurityConfigurationID}" Header="Security Configuration ID" Width="*" /> 
      <DataGridTextColumn x:Name="securityConfigurationNameColumn" Binding="{Binding Path=SecurityConfigurationName}" Header="Security Configuration Name" Width="*" /> 
      <DataGridTemplateColumn x:Name="proxyResponsibleUser_IDColumn" Header="Proxy Responsible User ID" Width="*" > 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox IsEnabled="True" ItemsSource="{Binding DataContext.Users, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" 
            SelectedValuePath="{Binding UserID}" DisplayMemberPath="{Binding FullName}" Width="117" Height="20" 
            SelectedValue="{Binding ProxyResponsibleUser_ID, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" /> 

        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

      <DataGridTextColumn x:Name="responsibleUser_IDColumn" Binding="{Binding Path=User.FullName}" Header="Responsible User ID" Width="*" /> 
      <DataGridTextColumn x:Name="securityConfigurationDescriptionColumn" Binding="{Binding Path=SecurityConfigurationDescription}" Header="Security Configuration Description" Width="*" /> 
      <DataGridTextColumn x:Name="securityConfigurationURLColumn" Binding="{Binding Path=SecurityConfigurationURL}" Header="Security Configuration URL" Width="*" /> 
     </DataGrid.Columns> 
    </DataGrid> 
+0

Pouvez-vous poster XAML de votre DataGrid afin que nous puissions avoir une meilleure idée de qu'est-ce que vous essayez de faire? – ASanch

+0

J'ai posté le DataGrid. J'attends avec impatience votre solution =) – cemregoksu

Répondre

1

Utilisez le modèle de cellule ci-dessous pour la zone de liste déroulante.

Ce code lie toute source de données grille modèle de zone de liste déroulante qui vous utilisez permettent une propriété sans faire l'escamotage de trouver ancêtres ..

<DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Grid DataContext="{Binding }"> 
         <ComboBox IsEnabled="True" 
           ItemsSource="{Binding Users}"     
           SelectedValuePath="{Binding UserID}" 
           DisplayMemberPath="{Binding FullName}" 
           Width="117" Height="20" 
           SelectedValue="{Binding ProxyResponsibleUser_ID, 
          UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/> 
        </Grid> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
+0

Je n'ai pas utilisé une autre grille mais je n'ai pas besoin de trouver d'ancêtre, je viens de lier la valeur selectedValue à ProxyResponsibleUser_ID et cela a fonctionné. Merci pour l'aide. – cemregoksu

+0

Ok..thats bon .. Above approche aurait également répondu à votre problème. – RockWorld