【发布时间】:2017-06-13 19:26:39
【问题描述】:
我有一个自定义依赖属性的用户控件...
public static readonly DependencyProperty ImageKeyProperty =
DependencyProperty.Register("ImageKey", typeof(string), typeof(ImageSelector),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
OnImageKeyPropertyChanged));
public string ImageKey
{
get { return (string)GetValue(ImageKeyProperty); }
set { SetValue(ImageKeyProperty, value); }
}
private static void OnImageKeyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
ImageSelector imageSelector = d as ImageSelector;
if (imageSelector == null) return;
if (e.NewValue == null || e.NewValue.ToString() == "")
{
imageSelector.Image.Source = null;
imageSelector.buttonSelect.Content = "select...";
imageSelector.Image.Visibility = Visibility.Collapsed;
}
else
{
imageSelector.Image.Source = ImageLibrary.GetImage(e.NewValue.ToString());
imageSelector.buttonSelect.Content = "change...";
imageSelector.Image.Visibility = Visibility.Visible;
}
imageSelector.PropertyChanged?.Invoke(imageSelector, new PropertyChangedEventArgs("ImageKey"));
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ImageSelectWindow w = new ImageSelectWindow();
w.ShowDialog();
if (w.DialogResult.HasValue && w.DialogResult.Value)
{
this.ImageKey = w.SelectedImageKey;
}
}
如果我将 ViewModel(即 DataContext)绑定到它...
<myControl ImageKey={Binding Image} />
我是否应该能够以编程方式在自定义 UserControl 中设置 ImageKey 值并更新绑定的 ViewModel 属性?显然不是,因为它不起作用。
我错过了什么? !?!?
【问题讨论】:
-
如何以及在何处以编程方式更新 ImageKey?你能分享那个代码部分吗?可能是,您在绑定之前更新了 ImageKey。
-
显示 OnImageKeyPropertyChanged 的代码
-
我为 OnImageKeyPropertyChanged 添加了代码,并展示了如何以编程方式更改该值。谢谢!
标签: wpf data-binding dependency-properties