Wpf 更新DependencyProperty值未更新绑定的ViewModel
我有一个自定义依赖属性的用户控件Wpf 更新DependencyProperty值未更新绑定的ViewModel,wpf,data-binding,dependency-properties,Wpf,Data Binding,Dependency Properties,我有一个自定义依赖属性的用户控件 public static readonly DependencyProperty ImageKeyProperty = DependencyProperty.Register("ImageKey", typeof(string), typeof(ImageSelector), new FrameworkPropertyMetadata(null, Fram
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)绑定到它
我是否应该能够以编程方式在自定义UserControl中设置ImageKey值,并更新绑定的ViewModel属性?显然不行,因为它不起作用 我错过了什么 “难道我不能以编程方式设置ImageKey值…” 简单回答:呃。。。不 对不起,这是很久以前的事了,但只是以防万一有人发现它并想知道 这是您的绑定:
<myControl ImageKey={Binding Image} />
简而言之,不可以,您不能以编程方式更新绑定属性。改为更新其绑定值:
(this.DataContext as MyViewModel).Image = w.SelectedImageKey;
玩得开心。如何和在哪里以编程方式更新ImageKey?你能分享那部分代码吗。可能是,您在绑定ImageKey之前更新了ImageKey。显示OnImageKeyPropertyChanged的代码我添加了OnImageKeyPropertyChanged的代码,并显示如何以编程方式更改该值。谢谢
this.ImageKey = w.SelectedImageKey;
(this.DataContext as MyViewModel).Image = w.SelectedImageKey;