我在论坛中搜索了一个解决方案。有几个类似的问题和解决方案,但我不能真正理解它们。请原谅我再问......: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属性被更新。
编译没有错误。但是当我尝试执行程序并选择我要加载的图像时,图像根本不显示......
希望有人可以就此启发我。真的撞墙几个小时试图弄清楚出了什么问题......提前多多感谢...
答案 0 :(得分:1)
将以下行添加到构造函数中:
this.DataContext = this;
这告诉表单它是自己的数据上下文。否则,用户控件不知道哪个对象“托管”MySource
属性。