2017-05-08 134 views
0

我使用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 
} 

回答

1

可以使用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://stackoverflow.com/questions/21717600/passing-parameters-between-xaml-window-and-usercontrol-wpf?rq=1) 您應該將DataContext的設置移至Loaded事件處理程序。 – madiden

+0

使用回調方法我發現在View實例完成後,該屬性被設置,並使用您在註釋中提供的鏈接,現在我可以訪問正確的值。您能否更新您的答案以在評論中包含鏈接。謝謝:) – IBRA

1

「的屬性總是返回null,並且永遠不會設置。」 - 是錯的。 DataSourceView構造函數中的屬性爲null。 DataSourceView實例創建後,屬性將被設置爲「Something」。

+0

是的,你說得對,我已經注意到使用在madiden的答案中提出的回調方法。感謝您的回答 :) – IBRA