Связывание с Relativesource --wpf - PullRequest
       17

Связывание с Relativesource --wpf

0 голосов
/ 02 сентября 2010

У меня короткий вопрос:

У меня есть сетка данных и она привязана к чему-то.Затем я поместил комбинированный список в столбец и связал его с другим источником с помощью

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

Теперь я хочу снова использовать источник данных в комбинированном списке снова. Этот код теперь не работает, и я знаю, что тамтакое столбец идентификатора в источнике данных.

SelectedValue="{Binding ID}"

Как это исправить?Заранее спасибо.

А вот и вся моя DataGrid, а проблемная часть - это комбинированный список.

 <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> 

1 Ответ

1 голос
/ 02 сентября 2010

Использовать шаблон ячейки ниже для поля со списком.

Этот код связывает весь источник данных сетки с шаблоном поля со списком, что позволяет вам использовать любое свойство, не прибегая к хитростям при поиске предков ..

<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>
...