依赖属性null

时间:2017-02-22 18:28:55

标签: c# xaml uwp

我使用Owner属性

创建了UserControl
<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以检查绑定是否正常,而且是。

为什么{c}中的Owner属性为null

2 个答案:

答案 0 :(得分:0)

问题最有可能发生在您的This财产中。您必须确认它不为空。添加PropertyChanged回调,然后调试并确认发送给OwnerProperty的值不为空。

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
}

答案 1 :(得分:0)

我已经检查过问题, Binding 首先出现在你网页的 Loading 事件中,其中是 ElementName (你是没有在任何地方设置 DataContext 。如果希望该值在 Page的构造函数中可用,则必须先调用绑定更新。这可以通过设置 DataContext 来完成,这将调用该过程,但x:Bind有一种更简单的方法:

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

然后在Page的构造函数中,您可以像这样调用绑定更新:

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

虽然改变逻辑可能比在构造函数中调用更新更好。