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();
}
これは機能していないようですが、どうしたらいいですか?
「 」を最初から設定しないのはなぜですか? –
DataContextプロパティにいつでも直接アクセスできるため、このプロパティは不要ですが、コードは正常に動作し、正常に動作するはずです。メモとして、PropertyChangedCallbackの 'null'チェックは必要ありません。 dependencyObject引数がnullになることはありません。 – Clemens
@Clemens - dependencyObjectがnullでないことを知るのに便利です。私は正常に動作した受け入れられた答えを実装しました。 –