Xaml DependencyProperty数据绑定返回空值
我正在编写一个Windows 8应用商店应用程序(Metro/Modern?),我正在创建一个控件,以便在多个表单上重复使用格式。我在过去创建了一些WPF应用程序,并尝试以与在WPF中相同的方式创建依赖项属性。但是,当我将控件放在窗体上以使用它时,我无法返回任何值 My personControl.cs WPF类:Xaml DependencyProperty数据绑定返回空值,xaml,windows-8,dependency-properties,Xaml,Windows 8,Dependency Properties,我正在编写一个Windows 8应用商店应用程序(Metro/Modern?),我正在创建一个控件,以便在多个表单上重复使用格式。我在过去创建了一些WPF应用程序,并尝试以与在WPF中相同的方式创建依赖项属性。但是,当我将控件放在窗体上以使用它时,我无法返回任何值 My personControl.cs WPF类: 公共部分类PersonControl:UserControl { 对于windows 8应用程序,它需要添加PropertyMetadata——我假设这就是我出错的地方,但我无法找到
公共部分类PersonControl:UserControl { 对于windows 8应用程序,它需要添加PropertyMetadata——我假设这就是我出错的地方,但我无法找到替代方法: 公共部分类PersonControl:UserControl {
据我所知,XAML中控件的用法或绑定没有任何变化。我仍在使用示例数据,因此我创建了一个列表(Person),然后创建一个listbox并将listbox绑定到列表(Person)
以下是绑定代码: 在usercontrol xaml上:
<Grid x:Name=”PersonGrid”>
…….
<TextBox x:Name="txtFirstName" Text="{Binding Path=thisPerson.FirstName, ElementName=This}"></TextBox>
…….
在主页Xaml上:
<StackPanel x:Name="layoutRoot">
<ListBox x:Name="myListbox">
<ListBox.ItemTemplate>
<DataTemplate>
<local:PersonControl x:Name="myControl" thisPerson="{Binding Path=.}" Margin="5"></local:PersonControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
主页代码隐藏:
List<Person> People = new List<Person>();
… populate data …
myListbox.ItemsSource = People;
List People=newlist();
…填充数据…
myListbox.ItemsSource=人;
另外,当我获取UserControlXaml的内容并将UI元素直接放入主页上的XAML中时,它工作正常——当我使用UserControl时,它失败了。IIRC,SetProperty调用仅在值与默认值不同时才导致注册更改。同样,IIRC,SetProperty不会比较实际对象,只是在是否设置了对对象的引用(object.Equals vs.object!=null)的情况下
new PropertyMetadata(new Person()));
SetValue无法按预期工作,因为它有一个对象,并且分配一个新对象不会导致属性更新。更改为
new PropertyMetadata(null)
我认为事情会正常进行
有点匆忙,所以可能我遗漏了什么…似乎usercontrol上XAML中的行:
<TextBox x:Name="txtFirstName" Text="{Binding Path=thisPerson.FirstName, ElementName=This}">
Windows 8中的情况不一样——当我取出对ElementName和DependencyProperty的引用时(我想是让.Net自己来解决这个问题吧?),效果很好
因此:
工作正常,绑定功能正常。您正在使用的绑定是什么?编辑了原件以显示我是如何绑定的。我尝试了此操作,但没有得到任何更好的结果。不过,感谢您的提示
new PropertyMetadata(null)
<TextBox x:Name="txtFirstName" Text="{Binding Path=thisPerson.FirstName, ElementName=This}">
<TextBox x:Name="txtFirstName" Text="{Binding Path=FirstName}"></TextBox>