WPF - 将参数从 Dialog Window 传递到 UserControl

WPF - Passing parameter from Dialog Window to UserControl

我正在使用 DependencyProperty 将参数从 DialogWindow 传递到 UserControl。 我希望在 UserControl 构造函数中使用该参数,以便将其传递给视图模型。

属性总是returns 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);
    }

以下 link 包含类似问题的解决方案:

Passing Parameters between xaml window and usercontrol WPF

"The property always returns null, and never get set." - 是错误的。 属性 在 DataSourceView 构造函数中为 null。 DataSourceView实例创建后,属性会被设置为"Something".