当前绑定值



我正在编写标记扩展。我有这样的XAML

<TextBlock Text="{ui:Test SomeInfo}" />

和TestExtension,构造函数接受一个字符串参数。我得到了"SomeInfo"字符串所以一切都是find。现在我想嵌套扩展,写一些像

这样的东西
<TextBlock Text="{ui:Test {Binding PropName}}" />

不能正常工作。我必须添加一个构造函数,它接受System.Windows.Data.Binding类型的一个参数。

现在我需要知道

  1. 我应该如何从绑定对象中检索当前值?
  2. 我应该什么时候做这个?我应该订阅的变化以某种方式或要求的值,每次在ProvideValue方法?

Update1 PropName应该根据TextBlock的DataContext进行解析。

Update2刚刚发现相关问题:我如何解决数据绑定的值?

这样的绑定将不起作用,因为你的MarkupExtension没有DataContext,它没有出现在可视化树中,我认为你不应该直接与绑定对象交互。你真的需要这个扩展吗?也许你可以只使用绑定和转换器?

如果不是可以创建一个具有可绑定属性的专用类(通过继承DependencyObject),但是这仍然不会给您ElementName所需的DataContext或名称范围或RelativeSource所需的可视树,因此在这种情况下使绑定工作的唯一方法是使用Source(例如将其设置为StaticResource)。这是不理想的。

还要注意,如果你不直接设置一个绑定ProvideValue方法只调用一次,这意味着,即使你有一个绑定在你的扩展,它可能不能证明非常有用的(除了一些例外,例如当返回复杂的内容,就像如ItemsControl使用绑定,但是您设置扩展TextBlock.Text就是一个字符串),我真的怀疑,你想用这样的MarkupExtension如果该值应根据绑定动态变化。如前所述:考虑为各种值使用转换器或MultiBindings。

最新更新