Question

J'ai une petite question:

J'ai un DataGrid et binded à 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 ne fonctionne pas maintenant d'utiliser à nouveau la source de DataGrid, dans le combobox again.That code et je sais qu'il ya une colonne ID source de DataGrid.

SelectedValue="{Binding ID}"

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

Et voici mon DataGrid tout et la partie problématique est le combobox.

 <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> 
Était-ce utile?

La solution

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

Ce code lie grille entière DataSource modèle de zone de liste déroulante qui vous utilisez permettent une propriété sans faire l'escamotage de trouver les 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top