Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xaml DependencyProperty数据绑定返回空值_Xaml_Windows 8_Dependency Properties - Fatal编程技术网

Xaml DependencyProperty数据绑定返回空值

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——我假设这就是我出错的地方,但我无法找到

我正在编写一个Windows 8应用商店应用程序(Metro/Modern?),我正在创建一个控件,以便在多个表单上重复使用格式。我在过去创建了一些WPF应用程序,并尝试以与在WPF中相同的方式创建依赖项属性。但是,当我将控件放在窗体上以使用它时,我无法返回任何值

My personControl.cs WPF类:
公共部分类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>