【问题标题】:Update of DependencyProperty value not updating bound ViewModelDependencyProperty 值的更新不更新绑定的 ViewModel
【发布时间】: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


【解决方案1】:

“我不应该能够以编程方式设置 ImageKey 值吗...?”

简短回答:呃……不。 抱歉,这是很久以前的事了,但以防万一有人发现它并想知道。

你在这里绑定:

<myControl ImageKey={Binding Image} />

在这里你正在破坏你的绑定:

this.ImageKey = w.SelectedImageKey;

简而言之,不,您不能以编程方式更新绑定的属性。改为更新其绑定值:

(this.DataContext as MyViewModel).Image = w.SelectedImageKey;

玩得开心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 2011-05-18
    • 2020-01-31
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2018-12-20
    相关资源
    最近更新 更多