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;