1

私はフォーラムでこれに対する解決策を探しました。似たような質問や解決策がいくつかありますが、私にはよくわかりません。もう一度質問してくれてごめんなさい...:P

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

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); }
}

次に、メインアプリケーションで、UserControlをメインウィンドウに配置し、そのようにリグアップしました...

   <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の画像コントロールに読み込まれます。つまり、MySourceが更新され、イベントのリップル全体がトリガーされ、ImageのSourceプロパティが更新されます。

コンパイルはエラーなしで行われました。しかし、プログラムを実行しようとして、ロードしたい画像を選択すると、画像がまったく表示されません...

誰かがこれについて私に教えてくれることを願っています。何が悪かったのかを理解しようとして、本当に何時間も壁にぶつかりました。

4

1 に答える 1

1

次の行をコンストラクターに追加します。

this.DataContext = this;

これは、それが独自のデータ コンテキストであることをフォームに伝えます。そうしないと、ユーザー コントロールは、どのオブジェクトがMySourceプロパティを "ホスト" しているかを認識できません。

于 2012-04-05T07:28:44.560 に答える