C# WinRT DependencyProperty从未设置

C# WinRT DependencyProperty从未设置,c#,xaml,user-controls,windows-runtime,dependency-properties,C#,Xaml,User Controls,Windows Runtime,Dependency Properties,在自定义UserControl中,我的dependencProperty有一些问题 我需要以一种特殊的方式显示关于人们的信息。为了实现这一点,我有几个用户控件,它们接收一个列表,其中(显然)包含一个或多个用户 让我向您展示我的(简化)代码,然后我将向您解释我的应用程序的实际行为 这是我的用户控件: public abstract class PeopleLine : UserControl { public static readonly DependencyProperty Peopl

在自定义
UserControl
中,我的
dependencProperty
有一些问题

我需要以一种特殊的方式显示关于人们的信息。为了实现这一点,我有几个
用户控件
,它们接收一个
列表
,其中(显然)包含一个或多个用户

让我向您展示我的(简化)代码,然后我将向您解释我的应用程序的实际行为

这是我的用户控件:

public abstract class PeopleLine : UserControl
{
    public static readonly DependencyProperty PeopleListProperty =
        DependencyProperty.Register("PeopleList", typeof(List<PeopleModel>), typeof(PeopleLine), new PropertyMetadata(default(List<PeopleModel>)));

    public List<PeopleModel> PeopleList
    {
        get { return (List<PeopleModel>)GetValue(PeopleListProperty); }
        set { SetValue(PeopleListProperty, value); }
    }
}
我在这里使用了几个并不重要的模型,因为我简化了代码,只包含最重要的信息

那么,回到我的问题上来。用字符串替换选择器数据模板中的
peoplecontrols:OnePeople
并将
LinePeopleList[0].Name
替换为
Text
时,我显示了正确的文本,证明我的数据此时是正确的。 问题是,当放回my
peoplecontrols:OnePeople
时,my
DependencyProperty
从未设置。我在PeopleList的setter上设置了一个断点,它从不触发

我尝试了几次修改(特别是本文中给出的那些修改,因此已尝试将
typeof(List)
替换为
typeof(object)
),但没有成功。此外,我尝试将我的
DependencyProperty
替换为
字符串
,并直接在
数据模板中发送名称
,但setter仍然没有被调用

我现在没有更多的想法,也不明白我的代码出了什么问题。任何帮助都将不胜感激。 提前谢谢


Thomas

在调用InitializeComponent后,尝试在用户控件的构造函数中添加以下行:

(this.Content as FrameworkElement).DataContext = this;
我在上创建了一个关于此的示例应用程序。希望它能正确反映您的情况:

如果你克隆应用并运行它,你会发现绑定不起作用。但是,如果从UserControl中取消对Datacontext=这一行的注释,那么一切都应该正常工作。以下是工作代码:

    public PeopleLine()
    {
        this.InitializeComponent();

        (this.Content as FrameworkElement).DataContext = this;
    }

老兄,这个解决方案非常优雅!我找到了另一个做同样事情的,我命名我的UserControl(比如
x:name=“Parent”
),然后在我的根视图中,我设置DataContext如下:
DataContext=“{Binding ElementName=Parent}”
。谢谢你的回答:)
(this.Content as FrameworkElement).DataContext = this;
    public PeopleLine()
    {
        this.InitializeComponent();

        (this.Content as FrameworkElement).DataContext = this;
    }