2012-12-13 68 views
2

我有一个DataGrid,它有一个DataGridTemplateColumn,它使用DataGrid的ItemsSource绑定,但是在DataGridTemplateColumn的ComboBox中,我希望能够绑定到视图的ViewModel而不是ItemsSource。如何使用RelativeSource绑定创建DataGrid绑定到Model和ViewModel?

<DataGrid ItemsSource="{Binding ModelValues, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" > 
     <DataGridTemplateColumn Header="myHeader" Width="200"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ComboBox DisplayMemberPath="Value" SelectedValuePath="Key" IsEnabled="False" 
          SelectedValue="{Binding myID, Mode=TwoWay}" 
          ItemsSource="{Binding Path=myList, 
          RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ViewModel}}}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      <DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <ComboBox DisplayMemberPath="Value" SelectedValuePath="Key" IsEnabled="False" 
          SelectedValue="{Binding myID, Mode=TwoWay}" 
          ItemsSource="{Binding Path=myList, 
          RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ViewModel}}}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
     </DataGridTemplateColumn> 
</DataGrid> 

视图模型具有ModelValues财产所有权以及myList财产。 ModelValues用于DataGridItemsSource,我想用myList代替ComboBoxItemsSource

我该如何更改我的RelativeSource命令,以便它能正常工作?

回答

5

绑定到网格的的datacontext:

<DataGrid ItemsSource="{Binding ModelValues, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" > 
     <DataGridTemplateColumn Header="myHeader" Width="200"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ComboBox DisplayMemberPath="Value" SelectedValuePath="Key" IsEnabled="False" 
          SelectedValue="{Binding myID, Mode=TwoWay}" 
          ItemsSource="{Binding Path=DataContext.myList, 
          RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      <DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <ComboBox DisplayMemberPath="Value" SelectedValuePath="Key" IsEnabled="False" 
          SelectedValue="{Binding myID, Mode=TwoWay}" 
          ItemsSource="{Binding Path=DataContext.myList, 
          RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
     </DataGridTemplateColumn> 
</DataGrid>