2016-07-12 12 views
0

ユーザーコントロールのデータコンテキストをウィンドウのデータコンテキストにバインドしようとしています。しかし、何らかの形で、ユーザーコントロールのコードの後ろに、データコンテキストがnullです。私はここで間違って何をしていますか?WPFのメインウィンドウにユーザーコントロールのデータコンテキストをバインドします。

{RelativeSource = {RelativeSource自己}、パス=のDataContextをバインド}

<Window x:Class="MyApp.Dialogs.SettingsWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:dialogs="clr-namespace:MyApp.Dialogs" 
     Title="Settings"> 

    <dialogs:Usercontrol DataContext="{Binding RelativeSource={RelativeSource Self}}"></dialogs:Usercontrol> 

</Window> 

答えて

2

MyApp.Dialogs.Usercontrolの場合は、定義されたその中に自分のDataContextそのXAML /コードビハインド、あなたはこれを上書きしようとしていると、あなたがこれを行うことができます。そのDataContext明示的に定義されていない

<dialogs:Usercontrol DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext}" /> 

MyApp.Dialogs.Usercontrol場合は、これを行う必要はまったくありません。親(Window)から自動的に継承されます。

3

ただし、ユーザーコントロールは、自動的にウィンドウのDataContextのを継承する必要があります!

1

DataContextがコード内でnullの場合は、バインディングがまだ解決されていないときにチェックしてください。あなたはコンストラクタをチェックインすることはありませんか?

バインドを使用すると、DataContextはタイプMyApp.Dialogs.Usercontrolである必要があります。ウィンドウと同じDataContextを作成したい場合は、バインディングを完全に削除してください。

+0

正確に!問題は、 'DataContext'をユーザーコントロールのコードビハインドの変数にキャストしようとしていることです!それが問題の場所です!そこで、ユーザーコントロールのコードビハインドで、その変数にデータコンテキストをキャストして割り当てる必要がありますか? – Vahid

+0

私は 'Load'イベントがトリガするまでに全てが読み込まれるべきだと言います。 @Vahid – Jai

+0

@Jai私が持っている問題はこれです:私は 'DataContext'を変更する' Checked'イベントを持つ私のユーザコントロールに2つのラジオボタンを持っています。コンポーネントが初期化されるとすぐに、 'Checked'イベントが発生し、nullデータコンテキストを変更しようとします。今のところ、データコンテキストが例外を回避するためにnullの場合、単にイベントから戻ってきますが、これを処理するためのより適切な方法が必要であることはわかっています。 – Vahid

関連する問題