1

我已经在论坛中搜索了这个问题的解决方案。有几个类似的问题和解决方案,但我无法真正理解它们。请原谅我再次问...:P

让我解释一下我的设置...我有一个 UserControl,它是作为与主应用程序分开的 dll 开发的。在这个相当复杂的 UserControl 中,我有几个子控件。其中之一是图像。我在 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); }
}

然后在我的主应用程序中,我将 UserControl 放在我的 MainWindow 中并将其装配起来......

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

MySource 在我的 MainWindow 的 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 回答