-1

在我开始解释我的问题之前: 这Slider只是以下问题的一个示例。我在一个自定义控件上工作,它必须像这里的滑块一样做非常相似的事情:

设想:

  • 我已将 a 绑定Slider.Value到我的 ViewModel 属性,名为MyValue.
  • 我已经定义MaximumSliderto 100
  • 现在我将属性设置MyValue200.

问题是什么?

  • Slider 将在内部强制将该值设为 100。
  • 但是该属性MyProperty没有更新。
  • 在我的情况下(我构建的自定义控件),我需要稍后继续使用强制值(100),而不是旧的(200)值。

问题:

我可以在自定义控件中做些什么吗?

例如,我在我的 和 中都尝试过myControl.GetExpression(MyValueProperty).UpdateSource();CoerseValueCallbackPropertyChangedCallback无论我尝试什么,绑定的 ViewModel-property 的设置器永远不会被调用,并且该属性保持不同步。

4

1 回答 1

1

Maximum将您的属性绑定Slider到另一个视图模型属性并实现逻辑以确保您的值始终在您的视图模型类中的有效范围内。

控件正确地强制了这些值,但是同步它们的逻辑应该在视图模型类中实现。

您的自定义控件应该能够在DataContext强制值时简单地设置其当前的源属性。

this.GetBindingExpression(Slider.ValueProperty).ResolvedSourcePropertyName应该给你源属性的名称,然后如果调用不起作用UpdateSource(),你可以使用反射来设置它。BindingExpression

于 2022-01-20T20:31:15.113 回答