3

我有 2 嵌套DataContexts在以下代码(DataContextItemsSource)中:

<TabItem Header="Something" Name="myTabItemName" d:DataContext="{Binding myViewModel}">
    <Grid>
        <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding muObservableCollection}" Name="myDataGridName" HeadersVisibility="Column">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Foo 01" Binding="{Binding Foo_01}" />
                <DataGridTextColumn Header="Foo 02" Binding="{Binding Foo_02}" />
                <DataGridTemplateColumn Header="My custom combobox">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <!-- Here I want to bind back to 'myViewModel's' myProperty. I've tried this way: -->
                            <ComboBox ItemsSource="{Binding Path=myProperty, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</TabItem>

我想分配myViewModel(回)给ComboBox's DataContext. 问题是ComboBox已经“覆盖”DataContext了:

<DataGrid ItemsSource="{Binding muObservableCollection}" ... >

我该怎么做?

4

1 回答 1

2
<ComboBox ItemsSource="{Binding Path=DataContext.myProperty, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" />

应该做的伎俩。但是我想指出,您想要的没有意义:您将 TabItem 绑定到 Order 实例,将 DataGrid 绑定到其 Orderlines,为什么要从 DataGrid 中的 Order 中获得组合框?所有列将显示相同的值,如果您更改一行,所有行的值都会更改。

我自己也遇到过几次这种情况,我需要访问更高的级别(由于重构与命令相结合),但这种情况相当罕见。

于 2012-11-09T07:46:49.817 回答