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
时,我显示了正确的文本,证明我的数据此时是正确的。
问题是,当放回mypeoplecontrols:OnePeople
时,myDependencyProperty
从未设置。我在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;
}