UserControl中暴露的DependencyProperty但无法绑定

时间:2012-04-05 07:17:13

标签: c# wpf image data-binding dependency-properties

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

让我解释一下我的设置......我有一个UserControl,它是从Main应用程序开发的一个单独的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)用户点击MainWindow中的Button。 2)弹出openFileDialog并选择要加载的图像文件。 3)确认选择后,图像应在MyUserControl的Image控件中加载。即MySource已更新,触发整个事件波动,导致Image的Source属性被更新。

编译没有错误。但是当我尝试执行程序并选择我要加载的图像时,图像根本不显示......

希望有人可以就此启发我。真的撞墙几个小时试图弄清楚出了什么问题......提前多多感谢...

1 个答案:

答案 0 :(得分:1)

将以下行添加到构造函数中:

this.DataContext = this;

这告诉表单它是自己的数据上下文。否则,用户控件不知道哪个对象“托管”MySource属性。