依赖属性空
问题描述:
我创建了我的用户有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?
答
问题很可能在您的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
虽然也许改变你的逻辑会比在构造函数中调用更新更好。
您测试过这不是空吗?显示你在哪里/如何设置这个。 – loopedcode
你可以显示转换器,你在那里返回?我怀疑问题在转换器内部 - 你有没有'返回值';最后? – Romasz
当然,我认为问题是,在窗口被加载后,价值获得绑定,我想要在我的结构和它的绑定可能会得到的价值? – miechooy