DataBinding对自定义控件的集合属性失败

时间:2009-04-28 10:17:20

标签: wpf data-binding custom-controls

我有一个用户控件 - 说“ControlBase”。它具有“SomeItems”属性,它是ObservableCollection<InheritedFromDO>,其中InheritedFromDO是继承自“DependencyObject”的类。 当我为ControlBase的子类创建标记时,我想发起“SomeItems”集合。但不知怎的,我不能在该标记中使用绑定,尽管该控件具有非常正常的DataContext,并且绑定在正常情况下有效。

看起来像这样:

<local:ControlBase
   ...
   >
   <local:ControlBase.SomeItems>
     <SomeItem
       DepPropertyOne={Binding Id} <!-- Does NOT work here -->
       />
     <SomeItem
       DepPropertyOne={Binding Name} <!-- Does NOT work here -->
       />
   <local:ControlBase.SomeItems>

   <Grid>
     <TextBlock
       Text={Binding Id} <!-- Works here -->
       />
   </Grid>
</local:ControlBase>

输出结果显示:

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Id; DataItem=null; target element is 'SomeItem' (HashCode=26965808); target property is 'DepPropertyOne' (type 'Object')

任何想法如何使其发挥作用?

1 个答案:

答案 0 :(得分:1)

那是因为集合中的项目不是逻辑树的一部分。如果你想让它工作,你需要customize the logical children你的控制,或者为你做控制的子控件(例如ItemsControl)。