2012-04-05 7 views
1

私はフォーラムでこれに対する解決策を探しました。同様の質問と解決策がいくつかありますが、私はそれらを本当に理解できません。 PUserControlのDependencyPropertyが公開されていますが、バインドできません。

私の設定を説明しましょう...私はメインアプリケーションから別のdllとして開発されたUserControlを持っています。この複雑なUserControl内には、いくつかの子コントロールがあります。それらの1つはイメージです。 UserControlコードビハインドでDependencyPropertyを宣言して、ImageのSourceプロパティを公開しました。

public static DependencyProperty MyImageSourceProperty = DependencyProperty.Register("MyImageSource", typeof(ImageSource), typeof(MyUserControl), new UIPropertyMetadata(null)); 

public ImageSource MyImageSource 
{ 
    get { return (ImageSource)GetValue(MyImageSourceProperty); } 
    set { SetValue(MyImageSourceProperty, value); } 
} 

はその後、私の主な用途では、私は私のメインウィンドウにユーザーコントロールを配置して、このような...

<controls:MyUserControl Name="MyControl" MyImageSource={Binding MySource}/> 

MYSOURCEが私のメインウィンドウのViewModelにに宣言されているとしてそれを装備しました。

public string MySource 
    { 
     get { return this.mySource; } 
     set { if (value == mySource) 
       return; 
      this.mySource = value; 
      OnPropertyChanged("MySource"); 
      } 
    } 

基本的には、プログラムは、このようなとして機能するようになっている: 1)ユーザーは、メインウィンドウ内のボタンをクリックします。 2)openFileDialogがポップアップし、読み込む画像ファイルを選択します。 3)選択を確定すると、イメージはMyUserControlのImageコントロールに読み込まれます。私。 MySourceが更新され、イベントのリップル全体がトリガされ、ImageのSourceプロパティが更新されます。

編集は間違いなく行われました。しかし、私がプログラムを実行しようとすると、ロードしたい画像を選択すると、画像はまったく表示されません...

誰かが私にこのことを教えてくれることを願っています。本当にたくさんの事前のおかげで...何が悪かったのかを把握しようとしている時間の壁に....叩い

+0

問題を解決するのに役立つビジュアルスタジオコンソールにバインドエラーがあります。 – Jonas

+0

フォームのデータソースとしてフォームのクラスを指定しましたか?それ以外の場合:どのオブジェクトに 'MySource'プロパティが含まれているかを彼女がどのようにコントロールするべきでしょうか?たとえば、コンストラクタでこれを行うことができます。 –

+1

ImageSourceプロパティを文字列に直接バインドすることはできません。 詳細については、[WPFでImage.SourceをStringにバインドする](http://stackoverflow.com/questions/2573912/binding-image-source-to-string-in-wpf)を参照してください。 – DmitryG

答えて

1

コンストラクタに次の行を追加します。これは、それという形を告げる

this.DataContext = this; 

をそれ自身のデータコンテキストです。そうでなければ、ユーザコントロールはどのオブジェクトがMySourceプロパティを "ホスト"しているかを知らない。

関連する問題