WPF - 从对话窗口传递参数到UserControl

问题描述:

我使用DependencyProperty从DialogWindow传递参数到UserControl。 我想要在UserControl构造函数内部的参数传递给视图模型。WPF - 从对话窗口传递参数到UserControl

该属性总是返回null,并且永远不会被设置。

代码:

主窗口:

var dialog = new DialogWindow(); 
dialog.ShowDialog(); 

DialogWindow.xaml

<TabControl> 
    <TabItem Header="Data Source"> 
     <local:DataSourceView Test="Something" /> 
    </TabItem> 
</TabControl> 

DataSourceView.xaml.cs

public static readonly DependencyProperty TestProperty = 
    DependencyProperty.Register("Test", typeof(object), typeof(DataSourceView)); 
public object Test { 
    get { return (object)GetValue(TestProperty); } 
    set { SetValue(TestProperty, value); } 
} 
public DataSourceView() { 
    InitializeComponent(); 
    DataContext = new DataSourceViewModel(Test);// Test is always null 
} 

可以使用DependencyProperty.Register方法的重载用PropertyMetadata这将有一个PropertyChangedCallback参数并观察数据绑定过程。

public static readonly DependencyProperty TestProperty = 
     DependencyProperty.Register("Test", typeof(object), typeof(DataSourceView), new PropertyMetadata(TestPropertyChangedCallback 
    )); 

    private static void TestPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     System.Diagnostics.Debug.WriteLine(e.NewValue); 
     System.Diagnostics.Debug.WriteLine(e.OldValue); 
    } 

下面的链接包含了一个类似的问题的解决方案:

Passing Parameters between xaml window and usercontrol WPF

+0

有类似的情况在这里: [链接](http://*.com/questions/21717600/passing-parameters-between-xaml-window-and-usercontrol-wpf?rq=1) 您应该将DataContext的设置移至Loaded事件处理程序。 – madiden

+0

使用回调方法我发现在View实例完成后,该属性被设置,并使用您在注释中提供的链接,现在我可以访问正确的值。您能否更新您的答案以在评论中包含链接。谢谢:) – IBRA

“的属性总是返回null,并且永远不会设置。” - 是错的。 DataSourceView构造函数中的属性为null。 DataSourceView实例创建后,属性将被设置为“Something”。

+0

是的,你说得对,我已经注意到使用在madiden的答案中提出的回调方法。感谢您的回答 :) – IBRA