1

我在尝试使用作为集合的一部分的对象中的依赖属性时遇到了一个问题,在自定义控件内部,由“ContentProperty”属性标识的集合。好的,这很不清楚。这是我的自定义控件的示例:

这是我的自定义控件基本定义:

[ContentProperty("SmarSearchScopes ")]
public class SmartSearchCc : Control
{
    List<SmartSearchScope> SmarSearchScopes {get;set;}
    (more code here)
}

这是 SmartSearchScope 对象的基本定义:

public class SmartSearchScope : DependencyObject
{
    public static readonly DependencyProperty ViewProperty =DependencyProperty.Register("View", typeof (ICollectionView), typeof (SmartSearchScope),new UIPropertyMetadata(null,OnViewChanged));

    public static readonly DependencyProperty FilterColumnsProperty =DependencyProperty.Register("FilterColumns", typeof (IEnumerable<ColumnBase>), typeof (SmartSearchScope),new UIPropertyMetadata(null, OnFilterColumnsChanged));
    public ICollectionView View
    {
        get { return (ICollectionView) GetValue(ViewProperty); }
        set { SetValue(ViewProperty, value); }
    }

    public IEnumerable<ColumnBase> FilterColumns
    {
        get { return (IEnumerable<ColumnBase>) GetValue(FilterColumnsProperty); }
        set { SetValue(FilterColumnsProperty, value); }
    }
    (more code here)
}

一切为了什么?能够通过 XAML 传递 SmartSearchScope 对象的集合,如下所示:

<SmartSearch:SmartSearchCc HorizontalAlignment="Stretch" Grid.Row="0" >
    <SmartSearch:SmartSearchScope  FilterColumns="{Binding ElementName=CcyPairsConfigBlotter, Path=Columns}" View ="{Binding ElementName=CcyPairsConfigBlotter, Path=ItemsSource}"/>
    <SmartSearch:SmartSearchScope FilterColumns="{Binding ElementName=ClientConfigBlotter, Path=Columns}" View ="{Binding ElementName=ClientConfigBlotter, Path=ItemsSource}"/>
</SmartSearch:SmartSearchCc>

'ClientConfigBlotter' 和 'CcyPairsConfigBlotter' 只是两个 ItemsControl,它们公开了一个 'Columns' 和一个 'ItemSource' d-property。

这里的问题是,虽然我的 2 个 SmartSearchScope 对象被实例化,但“View”和“FilterColumns”d-properties 上的数据绑定没有进行,而且我从来没有通过相关的回调。

此外,这是我在创建自定义控件时收到的输出错误消息。

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Columns; DataItem=null; target element is 'SmartSearchScope' (HashCode=56862858); target property is 'FilterColumns' (type 'IEnumerable`1')
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=ItemsSource; DataItem=null; target element is 'SmartSearchScope' (HashCode=56862858); target property is 'View' (type 'ICollectionView')

这很明显,我错过了一些东西,但我找不到什么。

我必须说,在该控件的先前版本中,这 2 个有问题的 d-properties 其中 SmartSearchCc 属性和所有工作都很好。

谢谢你的帮助 :)

- 布鲁诺

4

2 回答 2

1

我在这里遇到了类似的问题:Bindings on child dependency object of usercontrol not working

绑定不起作用的原因是 DependencyObjects 没有 DataContext 属性。就我而言,我将它们更改为从解决问题的 FrameworkElement 继承。

尽管正如其他人所提到的,将父控件更改为 ItemsControl 可以简化事情。

于 2011-03-02T11:37:55.970 回答
0

好的,问题解决了,我将主自定义控件的继承从控件切换到 ItemsControl,并将我的子对象继承到 FrameWork 元素,仅此而已。无需进一步修改。

谢谢大家的建议 !

于 2011-03-02T15:05:00.610 回答