Wpf 将内部ContentControl控件绑定到父项control项

Wpf 将内部ContentControl控件绑定到父项control项,wpf,binding,itemscontrol,contentcontrol,Wpf,Binding,Itemscontrol,Contentcontrol,我想我几乎成功了,但仍在为最终的解决方案而挣扎 我有一个BoardListItemsControl,它有N个项目-全部 工作 我有一个内部EepromContentControl,其中包含某些字段-除了我必须将按钮的标签绑定到项控件项外,其他一切都可以正常工作。在“代码隐藏”中,我将把这个标记投射到Board对象并执行各种操作 如您所见,我尝试使用相对资源,但它将我带到实际的项目控件,而不是项目本身。我可能错过了一些愚蠢的东西,但我就是找不到。 谢谢你的帮助。谢谢 <!--List o

我想我几乎成功了,但仍在为最终的解决方案而挣扎

  • 我有一个BoardList
    ItemsControl
    ,它有N个项目-全部 工作
  • 我有一个内部Eeprom
    ContentControl
    ,其中包含某些字段-除了我必须将按钮的
    标签
    绑定到
    项控件
    项外,其他一切都可以正常工作。在“代码隐藏”中,我将把这个
    标记
    投射到Board对象并执行各种操作
如您所见,我尝试使用
相对资源
,但它将我带到实际的
项目控件
,而不是项目本身。我可能错过了一些愚蠢的东西,但我就是找不到。 谢谢你的帮助。谢谢

<!--List of "Board" items-->
<ItemsControl ItemsSource="{Binding BoardList}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <GroupBox>
                <!--Eeprom is an object within "Board" item-->
                <ContentControl Content="{Binding Eeprom}">
                    <ContentControl.ContentTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBox Text="{Binding IdPage}"/>
                                <Button Tag="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl}}" Click="Button_Click"/>
                            </StackPanel>
                        </DataTemplate>
                    </ContentControl.ContentTemplate>
                </ContentControl>
            </GroupBox>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

完整版本(我无意中离开了重要容器):


您可能需要尝试获取
ContentControl
DataContext

<Button Tag="{Binding RelativeSource={RelativeSource AncestorType=ContentControl}, Path=DataContext}" Click="Button_Click"/>

您可能需要尝试获取
ContentControl
DataContext

<Button Tag="{Binding RelativeSource={RelativeSource AncestorType=ContentControl}, Path=DataContext}" Click="Button_Click"/>

在控件层次结构中有多个从
ContentControl
派生的控件:

  • ContentControl
    (您的)
    • materialDesign:ColorZone
      • materialDesign:popubox
        • 材料设计:卡片
          (未显示)
这就是为什么绑定不起作用。它将在遍历父控件时返回第一个控件的数据上下文。此控件是
materialDesign:Card
及其数据上下文
Eeprom

如果在层次结构中指定所需的
ContentControl
,则可以使绑定工作。这是由
存储级别定义的。您的目标
ContentControl
是父层次结构中的第四个,因此请指定
4

<Button Tag="{Binding RelativeSource={RelativeSource AncestorType=ContentControl, AncestorLevel=4}, Path=DataContext}" Click="Button_Click"/>

在控件层次结构中,有多个从
ContentControl
派生的控件:

  • ContentControl
    (您的)
    • materialDesign:ColorZone
      • materialDesign:popubox
        • 材料设计:卡片
          (未显示)
这就是为什么绑定不起作用。它将在遍历父控件时返回第一个控件的数据上下文。此控件是
materialDesign:Card
及其数据上下文
Eeprom

如果在层次结构中指定所需的
ContentControl
,则可以使绑定工作。这是由
存储级别定义的。您的目标
ContentControl
是父层次结构中的第四个,因此请指定
4

<Button Tag="{Binding RelativeSource={RelativeSource AncestorType=ContentControl, AncestorLevel=4}, Path=DataContext}" Click="Button_Click"/>

凯瑟内特,谢谢你!你的回答奏效了(在我将我的结构调整到我最初发布的内容之后)。我在这里简化了它,认为它会使它更干净,并且遗漏了一些容器,这些容器会产生差异。我只是编辑了原始文章,结构完整,但仍然不起作用。正如您所看到的,有两个内部自定义
ContentControl
s,我知道这会让我很郁闷,因为如果我删除它们,您的解决方案就会起作用。你能告诉我怎么避开这个吗?非常感谢。我知道有一个
FindAncestor
模式,但我无法让它工作。Keithernet,谢谢!你的回答奏效了(在我将我的结构调整到我最初发布的内容之后)。我在这里简化了它,认为它会使它更干净,并且遗漏了一些容器,这些容器会产生差异。我只是编辑了原始文章,结构完整,但仍然不起作用。正如您所看到的,有两个内部自定义
ContentControl
s,我知道这会让我很郁闷,因为如果我删除它们,您的解决方案就会起作用。你能告诉我怎么避开这个吗?非常感谢。我知道有一个
FindAncestor
模式,但我不能让它工作。谢谢!这有助于您了解这个MD库,因为我忘了PopuBox是用卡构建的。无论如何,非常有用的迷你教程。谢谢非常感谢。这有助于您了解这个MD库,因为我忘了PopuBox是用卡构建的。无论如何,非常有用的迷你教程。谢谢