我创建一个用户控件有一个DependencyProperty但DependencyProperty的是没有得到调用者的传入值。自定义依赖属性不获取绑定输入
我发现在我自己以下调查
如果我使用内置的用户控件,如TextBlock,一切正常。这将问题缩小到我的UserControl的实现(而不是调用UserControl的代码)
我的属性更改了回调函数,我注册的函数甚至没有被调用(好吧...至少该断点不是被击中)
如果当我用的结合提供了依赖属性只看到这个问题,所以这不起作用:
<common:MyUserControl MyDP="{Binding MyValue}"/>
,但我没有问题,如果我摆脱绑定和硬编码的值,所以这个工程:
<common:MyUserControl MyDP="hardCodedValue"/>
这里的背后我的用户代码:
public partial class MyUserControl : UserControl
{
public string MyDP
{
get { return (string)GetValue(MyDPProperty); }
set { SetValue(MyDPProperty, value); }
}
public static readonly DependencyProperty MyDPProperty =
DependencyProperty.Register(
"MyDP",
typeof(string),
typeof(MyUserControl),
new FrameworkPropertyMetadata(
"this is the default value",
new PropertyChangedCallback(MyUserControl.MyDPPropertyChanged)));
public static void MyDPPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
((MyUserControl)obj).MyDP = (string)e.NewValue;
}
public MyUserControl()
{
InitializeComponent();
this.DataContext = this;
}
}
而这里的XAML
<Grid>
<TextBlock Text="{Binding MyDP}"/>
</Grid>
由于我能够使用内置的用户控件,如TextBlock的,我不认为错误在于我的主机代码,但在这里它,只是让你有一个完整的画面:
<StackPanel>
<common:MyUserControl MyDP="{Binding MyValue}"/>
</StackPanel>
public class MainWindowViewModel
{
public string MyValue { get { return "this is the real value."; } }
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}
}
删除该行看起来像它帮助!我的MyDPPropertyChanged方法最终被调用,并且具有正确的数据绑定值。谢谢,这让我更接近了。 虽然我仍然有问题 - 用户界面似乎没有得到更新的新值。有任何想法吗?我尝试了AffectsRender = true,但那似乎不起作用。 – 2013-04-23 05:30:33
我也尝试删除回调,因为你建议,并没有区别。 – 2013-04-23 05:38:49
@vivekmaharajh我需要看到一些XAML的UserControl来帮助这方面。 – Jay 2013-04-23 13:15:27