我使用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
以检查绑定是否正常,而且是。
为什么{c}中的Owner
属性为null
?
答案 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
虽然改变逻辑可能比在构造函数中调用更新更好。