c# – usercontrol的子依赖项对象上的绑定不起作用

我正在尝试使用绑定来处理用户控件的子对象. Xaml看起来像这样:

<MyGrid>
    <MyColumn ExtendedColumnData="{Binding ColumnToolTipDescriptions}"/>
</MyGrid>

以下是类的定义方式:

[ContentProperty("Columns")]
public class MyGrid : UserControl
{
    private MyColumnCollection _columns;

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), Category("Data")]
    public MyColumnCollection Columns
    {
        get
        {
            if (_columns == null)
                _columns = new MyColumnCollection();

            return _columns;
        }
    }
}

public class MyColumnCollection : ObservableCollection<MyGridColumn>
{
}

public class MyGridColumn : DependencyObject
{
    public object ExtendedColumnData
    {
        get { return (object)GetValue(ExtendedColumnDataProperty); }
        set { SetValue(ExtendedColumnDataProperty, value); }
    }

    public static readonly DependencyProperty ExtendedColumnDataProperty =
        DependencyProperty.Register("ExtendedColumnData", typeof(object), typeof(MyGridColumn), new UIPropertyMetadata(null));
}

据我所知,绑定甚至没有试图获取数据,因为我已经尝试将转换器放在绑定上,并且Convert方法上的断点永远不会被命中.

我正在使用MVVM模式,因此窗口的DataContext属性设置为视图模型.

我在这里阅读了一些其他问题并尝试了绑定的各种排列,例如:

<MyColumn ExtendedColumnData="{Binding DataContext.ColumnToolTipDescriptions, ElementName=MyViewName}" />
<MyColumn ExtendedColumnData="{Binding DataContext.ColumnToolTipDescriptions, RelativeSource={RelativeSource AncestorType={x:Type local:MyView}}" />

但仍然没有运气,绑定不会开火!令人讨厌的是,这似乎工作正常(如果我将属性添加到网格):

<MyGrid ExtendedColumnData="{Binding ColumnToolTipDescriptions}">
    <MyColumn />
</MyGrid>

我对WPF没有经验,所以我确定我错过了什么?

最佳答案 问题是MyColumnCollection不继承数据上下文(控件的常用属性不是继承上下文的一部分).如果您没有数据上下文绑定将无法正常工作.

要解决这个问题,请尝试继承MyColumnCollection,而不是从ObservableCollection继承,而是从FreezableCollection继承(freezable属性是继承上下文的一部分).

点赞