2010-09-02 75 views
0

我有一个简短的问题:用Relativesource绑定--wpf

我有一个datagrid并将其绑定到某个东西。然后,我把一列组合框和

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

现在我想再次使用DataGrid的来源,在下拉列表again.That代码不工作现在它绑定到另一个源,我知道有一个DataGrid源代码中的ID列。

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

你可以发布你的DataGrid的XAML,所以我们可以有一个更好的主意你在做什么? – ASanch 2010-09-02 06:14:23

+0

我发布了数据网格。我期待着您的解决方案=) – cemregoksu 2010-09-02 07:11:15

回答

1

在单元格模板下面使用组合框。

此代码绑定整个网格的数据源组合框模板,它允许你使用任何属性,而不做寻找祖先的戏法..

<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

我没有使用另一个网格,但我也不需要找到任何祖先,我只是将selectedValue绑定到ProxyResponsibleUser_ID,它工作。感谢帮助。 – cemregoksu 2010-09-03 05:58:19

+0

好的..好的..上面的方法也可以解决你的问题。 – RockWorld 2010-09-03 06:34:55