【问题标题】:Binding a Dependencyproperty as the Datacontext将 Dependencyproperty 绑定为 Datacontext
【发布时间】:2014-02-26 00:20:17
【问题描述】:

我正在构建一个带有 Dependencyproperty 的自定义控件。我希望依赖属性成为我控件中容器的数据上下文。但是当我使用控件创建视图并绑定属性时,它不起作用。 代码示例:

public partial class MyControl : UserControl
{
    public static readonly DependencyProperty MyItemsProperty =  
        DependencyProperty.Register("MyItems", typeof (ObservableCollection <object>), typeof (MyControl), 
        new PropertyMetadata (new ObservableCollection <object>()));

    public ObservableCollection <object> MyItems
    {
        get { return (ObservableCollection <object> GetValue (MyItemsProperty); }
        set { SetValue (MyItemsProperty,  value); }
    }

    public MyControl()
    {
        InitializeComponent();
        ControlItemHost.DataContext =      MyItems;
    }
}

在我的控件的 xaml 中,我有一个项目容器 (ControlItemHost)。

当我构建主视图并初始化属性时: MyItems="{绑定 ListOfItems}"

我看不到这些项目,但如果我添加 MyControl 项目,我会看到它们。 我该如何解决这个问题,以便我可以从控件外部绑定?

(属性必须是数据上下文)

【问题讨论】:

    标签: c# dependency-properties datacontext


    【解决方案1】:

    您只是为 DataContext 属性分配一个常量值,而不是建立绑定。请尝试以下操作:

    ControlItemHost.SetBinding(FrameworkElement.DataContextProperty, new Binding("MyItems") { Source = this });
    

    【讨论】:

    • 我在 MyControl 的构造函数中写了这个,但是当我从视图绑定 MyItems 时它仍然不起作用。
    • 我在视图构造函数中为属性添加了一个绑定,它与您的代码一起工作!我可能在 xaml 中有一个错误,这就是为什么我第一次尝试使用您的答案时它不起作用的原因。非常感谢!!!!
    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2016-09-06
    • 2012-08-25
    • 1970-01-01
    相关资源
    最近更新 更多