【问题标题】:Nested DataContext嵌套数据上下文
【发布时间】:2012-10-29 07:42:30
【问题描述】:

我在以下代码中有 2 个嵌套的 DataContextsDataContextItemsSource):

<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'sDataContext。问题是ComboBox 已“覆盖”DataContext 行:

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

我该怎么做?

【问题讨论】:

标签: wpf binding datacontext nested


【解决方案1】:
<ComboBox ItemsSource="{Binding Path=DataContext.myProperty, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" />

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

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

【讨论】:

  • 您的代码正是我第一篇文章中的代码(您只在myProperty 之前添加了DataContext。ID 不起作用。应该吗?我的DataGrid 中的每一行都是学术讲师谁有 NameSurnameAcademicDegree 可以从组合框中选择。学位是固定的,我从数据库中获取它们。这就是我需要的原因改变上下文。
  • 差异很重要。在您的代码中,您绑定到 tabitem 上不存在的道具,在我的版本中,您绑定到数据上下文,该数据上下文引用了具有该道具的对象实例。顺便说一句,您的代码在 tabitem 上设置了设计时数据上下文。并且
  • 我没有注意到您绑定到组合的 itemssource。我可以看到你现在用这种方式解决它。但是,我曾经通过将共享列表的引用添加到绑定到数据网格的模型来解决问题。
猜你喜欢
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
相关资源
最近更新 更多