8

主题行真的说明了一切!我有一个用户控件,可以成功地绑定到一个 Fullname 对象——也就是说,它可以正常工作。

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

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

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

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

提前谢谢了!

更新:

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

<ItemsControl ItemsSource="{Binding Path=FullnameList}"> 
...then...
<ItemsControl.ItemTemplate>
  <DataTemplate>
    <jasControls:NameView
      NameValue="{Binding Path=.}" 
      InEditMode= ??????? />

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

  • 全名列表

  • ParentInEditMode

  • 全名(用于测试 NameView 的单个项目,它在任何列表控件之外与此 xaml 完美配合使用:

     <jasControls:NameView NameValue="{Binding Path=Fullname}" InEditMode="{Binding Path=ParentInEditMode}"/>
    

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

4

2 回答 2

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}}}" />

这会正确地选取作为 FullnameList 兄弟的属性并将其传递给数据模板项。更多的是运气而不是判断,但我希望这是一种有效的方法!

于 2009-09-18T09:53:46.993 回答
0

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

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

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

于 2009-09-18T02:28:18.783 回答