0

WPFユーザーコントロールを使用するWPFアプリケーションがあります。DataContextを設定すると、UserControlでPropertyChangedがnullになる

ユーザーコントロールは、自分のWPFアプリケーションでバインドしたいDependencyPropertyを公開します。

私のユーザーコントロールが独自のDataContextを設定していない限り、これは機能し、DependencyPropertyの変更を聞くことができます。

DataContextを設定する瞬間、呼び出されているPropertyChangedはnullです。

私はここで何が欠けていますか?

コードサンプル: https://skydrive.live.com/redir.aspx?cid=367c25322257cfda&page=play&resid=367C25322257CFDA!184

+0

外部サイトへのリンクを投稿するのではなく、問題を示す簡単なコードサンプルを投稿すると、より多くのヘルプが得られます。 –

答えて

0

DependencyPropertyが相続財産を持っているので、あなたがUserControlDPのDataContextのを設定しない場合は、DataContextのは、メインウィンドウのDataContextのから継承されます。この場合、下のコードのUserControlDPのDataContextはMainWindow_ViewModelと設定されています。したがって、バインディングは正しく実行されます。他の場合には

<usercontrol:UserControlDP Width="200" Height="100" 
    TestValue="{Binding TestValueApp, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" 
    Margin="152,54,151,157"></usercontrol:UserControlDP> 

、UserControlDPのDataContextのはUserControlDP_ViewModelとして設定され、そう結合が破壊されます。最初の例外メッセージは、デバッグウィンドウで次のように表示されます。

System.Windows.Data Error: 40 : BindingExpression path error: 'TestValueApp' property not found on 'object' ''UserControlDP_ViewModel' (HashCode=24672987)'. BindingExpression:Path=TestValueApp; DataItem='UserControlDP_ViewModel' (HashCode=24672987); target element is 'UserControlDP' (Name=''); target property is 'TestValue' (type 'Object') 
0

DataContextを、UserControl自体にではなくUserControlに含まれる要素の1つに設定することを検討してください。

0

入力いただきありがとうございます、詳細を明らかにする。

私は簡単な方法を考え出し、コントロールからViewModelを削除しました。 アプリケーション用のMVVMですが、ユーザーコントロール用のMVVMはありません。

この方法では、ユーザーコントロールでバインディングを使用せず、代わりにメインアプリケーションにバインドされている依存関係プロパティを使用します。

関連する問題