ItemsControl中的DataTemplate中的WPF UserControl - 如何绑定到ItemsSource的父级

J S*_*art 8 data-binding wpf binding user-controls itemscontrol

主题行说明了一切!我有一个用户控件,可以成功绑定到一个Fullname对象 - 即它工作正常.

我现在需要显示这些列表,并且,当控件位于ItemsControl.Template中的DataTemplate中时,这也可以正常工作.

但是,控件有一个属性(InEditMode),它不是Fullname对象的属性,而是具有ItemsControl绑定的FullnameList属性的对象,通过ItemsSource.当控件不在列表中并且绑定到名为ParentInEditMode和ParentFullname的父兄弟属性时,此InEditMode属性可正常工作.

问题是 - 当控件是ItemsControl时,"获取"父对象的编辑模式属性需要什么样的绑定表达式?

或者,我应该重新设计Fullname对象以包含EditMode属性吗?

提前谢谢了!

更新:

该项(即绑定到ItemsControl的集合中的项)没有这样的属性.代码很简单:

<ItemsControl ItemsSource="{Binding Path=FullnameList}"> 
...then...
<ItemsControl.ItemTemplate>
  <DataTemplate>
    <jasControls:NameView
      NameValue="{Binding Path=.}" 
      InEditMode= ??????? />
Run Code Online (Sandbox Code Playgroud)

整体父级(窗口的视图模型)具有以下属性:

  • FullnameList
  • ParentInEditMode
  • Fullname(用于测试NameView的单项,与任何列表控件之外的xaml完美配合使用:

    <jasControls:NameView NameValue="{Binding Path=Fullname}" InEditMode="{Binding Path=ParentInEditMode}"/>
    
    Run Code Online (Sandbox Code Playgroud)

我想将编辑模式应用于整个集合 - 使该标志成为Fullname的一部分似乎不对!?

J S*_*art 15

我找到了自己问题的答案,我希望能帮助别人.我的工作语法是这样的:

<StackPanel>
    <ItemsControl ItemsSource="{Binding Path=FullnameList}">
    ...then...
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <jasControls:NameView
          NameValue="{Binding Path=.}" 
          InEditMode= "{Binding DataContext.ParentInEditMode,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}}" />
Run Code Online (Sandbox Code Playgroud)

这会正确地获取属于FullnameList的兄弟属性并将其传递给数据模板项.更多的是运气而不是判断,但我希望这是一个有效的方法来做到这一点!


Tra*_*ife 0

对于 ItemsSource 中的每个项目,ItemsControl 创建指定的 DataTemplate 并向其 DataContext 分配相应的项目。现在,每个 DataTemplate 都可以绑定到其数据上下文中的项目。

所以我想你的项目确实有一个属性“ParentInEditMode”;绑定到该属性应该没有问题。

如果它不起作用,请使用一些代码更新您的问题。