依赖属性空

问题描述:

我创建了我的用户有Owner财产依赖属性空

<shared:NavigationControl Owner="{Binding ElementName=This, Converter={StaticResource TestConverter}}" /> 

This财产是我的网页x:Name

这里是后面的代码:

public MvxWindowsPage Owner 
{ 
    get { return (MvxWindowsPage)GetValue(OwnerProperty); } 
    set { SetValue(OwnerProperty, value); } 
} 

public static readonly DependencyProperty OwnerProperty = 
       DependencyProperty.Register("Owner", typeof(MvxWindowsPage), typeof(NavigationControl), null); 

我创建TestConverter检查结合是确定的,它是。

为什么Owner属性是null in cs?

+0

您测试过这不是空吗?显示你在哪里/如何设置这个。 – loopedcode

+0

你可以显示转换器,你在那里返回?我怀疑问题在转换器内部 - 你有没有'返回值';最后? – Romasz

+0

当然,我认为问题是,在窗口被加载后,价值获得绑定,我想要在我的结构和它的绑定可能会得到的价值? – miechooy

问题很可能在您的This属性中。你将不得不确认它不是空的。添加一个PropertyChanged回调,然后调试并确认发送到您的OwnerProperty的值不为null。

public MvxWindowsPage Owner 
{ 
    get { return (MvxWindowsPage)GetValue(OwnerProperty); } 
    set { SetValue(OwnerProperty, value); } 
} 

public static readonly DependencyProperty OwnerProperty = 
       DependencyProperty.Register("Owner", typeof(MvxWindowsPage), typeof(NavigationControl), new PropertyMetadata(PropChanged)); 

public static void PropChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
{ 
     var value = e.NewValue; //confirm this isn't null 
} 
+0

e.NewValue包含适当的值; O – miechooy

正如我已检查的问题是,绑定可先在你的页面加载事件哪里是的ElementName(你是不是设置的DataContext任何地方)。如果您希望该值在构造函数中可用,那么您将不得不先调用绑定更新。这可以通过设置的DataContext这将调用过程来完成,但是存在与x:Bind一个简单的方法:在页面的构造函数,你可以ivoke这样的绑定更新

<local:MyUserControl x:Name="myUsrCtrl" Owner="{x:Bind This, Mode=OneWay, Converter={StaticResource MyConverter}}"/> 

则:

public BlankPage() 
{ 
    this.InitializeComponent(); 
    this.Bindings.Update(); 
    var aaa = myUsrCtrl.Owner; // this shouldn't be null now 
    // rest of code 

虽然也许改变你的逻辑会比在构造函数中调用更新更好。

+0

非常感谢Yor时间。关键是我有这个用户控件是导航栏。我想让它在我的应用程序的任何页面上可见。导航行为是突出显示当前查看的页面。我以为我可以有这个导航栏当前页面,所以我可以突出显示此导航栏控件中的图标 – miechooy

+2

@miechooy然后,我会去为不同的设计。使你的窗户内容成为一个*导航栏*,导航栏在底部,其余部分填充框架,这将保留其余的页面。然后在你的导航栏中,你可以绑定到'Frame.Content'(如果需要,可以进行一些转换)。 – Romasz