2017-05-08 12 views
0

DependencyProperty를 사용하여 DialogWindow에서 UserControl로 매개 변수를 전달하고 있습니다. 뷰 모델에 전달하기 위해 UserControl 생성자 내에이 매개 변수를 사용하고 싶습니다.WPF - Dialog Window에서 UserControl에 매개 변수 전달

속성은 항상 null을 반환하고 설정되지 않습니다.

코드 :

MainWindow를 :

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 방법의 오버로드를 사용할 수 있습니다 PropertyMetadataPropertyChangedCallback 매개 변수를 가지며 데이터 바인딩 프로세스를 관찰합니다. 링크를

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); 
    } 

비슷한 문제에 대한 솔루션이 포함되어 ". 속성은 항상 null을 반환하고, 설정되지는 결코"

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의 설정을로드 된 이벤트 처리기로 이동해야합니다. – madiden

+0

콜백 메서드를 사용하면 View 인스턴스가 완료된 후에 속성이 설정되고 주석에 제공된 링크를 사용하여 이제 올바른 값에 액세스 할 수 있습니다. 댓글에 링크가 포함되도록 답변을 업데이트 해 주시겠습니까? 고마워요 :) – IBRA

1

을 - 틀렸어. DataSourceView 생성자에서 속성이 null입니다. DataSourceView 인스턴스가 만들어지면 속성이 "Something"으로 설정됩니다.

+0

예, 당신 말이 맞아요, 나는 마디 던의 대답에서 제안 된 콜백 방법을 사용하는 것으로 나타났습니다. 귀하의 답변을 주셔서 감사합니다 :) – IBRA