3

DataContexts次のコード(DataContextおよび)に2つネストされていますItemsSource

<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-instance にバインドし、DataGrid をその Orderlines にバインドします。なぜ DataGrid の Order からコンボボックスが必要なのですか? すべての列に同じ値が表示され、1 つの行を変更すると、すべての行の値が変更されます。

より高いレベルにアクセスする必要があるという状況に何度か遭遇しましたが (コマンドと組み合わせてリファクタリングしたため)、かなりまれです。

于 2012-11-09T07:46:49.817 に答える