2016-11-09 6 views
0

私はViewModelという依存関係プロパティを持つユーザーコントロールを持っています。このプロパティがこのコントロールのデータコンテキストであるように設定されている値が必要です。wpfの親コントロールのプロパティにバインドされた依存関係プロパティを使用して、xamlでユーザーコントロールのdatacontextを設定できますか?

ここではその使用例を示します。ここで

<uc:MyCustomControl ViewModel="{Binding CustomControlViewModel}"/> 

これは、「MyCustomControl」のコンストラクタです

public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(
     "ViewModel", typeof(CustomControlViewModel), typeof(MyCustomControl), new PropertyMetadata(default(CustomControlViewModel), PropertyChangedCallback)); 

    public CustomControlViewModel ViewModel 
    { 
     get { return (CustomControlViewModel)GetValue(ViewModelProperty); } 
     set 
     { 
      SetValue(ViewModelProperty, value); 
     } 
    } 

    private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs) 
    { 
     var control = (MyCustomControl) dependencyObject; 
     if (control == null) 
     { 
      return; 
     } 
     control.DataContext = (CustomControlViewModel) dependencyPropertyChangedEventArgs.NewValue; 
    } 

コードビハインド「MyCustomControl」のためのViewModel依存関係プロパティのためです。

public MyCustomControl() 
    { 
     InitializeComponent(); 
    } 

これは機能していないようですが、どうしたらいいですか?

+1

」を最初から設定しないのはなぜですか? –

+1

DataContextプロパティにいつでも直接アクセスできるため、このプロパティは不要ですが、コードは正常に動作し、正常に動作するはずです。メモとして、PropertyChangedCallbackの 'null'チェックは必要ありません。 dependencyObject引数がnullになることはありません。 – Clemens

+0

@Clemens - dependencyObjectがnullでないことを知るのに便利です。私は正常に動作した受け入れられた答えを実装しました。 –

答えて

2

DataContextは、DependencyPropertyです。このようにビューモデルに直接割り当てることができます。

<uc:MyCustomControl DataContext="{Binding CustomControlViewModel}"/> 
関連する問題