1

我正在尝试绑定到一个值,在其上运行转换器,然后显示该值的属性。让转换器直接返回我想要的属性是行不通的,因为我需要跟踪属性更改。

我想要实现的是这样的:

// NOTE: FOLLOWING IS NOT SUPPORTED BY WPF
// A 'Binding' cannot be set on the 'Source' property of type 'Binding'.
// A 'Binding' can only be set on a DependencyProperty of a DependencyObject.

Text={Binding TextField Source={Binding SomeValue, Converter={StaticResource GetObjectFromValueConverter}}}`

理想情况下,这一切都将包含在一个简单的标记扩展中。

Text={l:GetTextField SomeValue}

问题是,除了将元素绑定到转换器,然后将目标字段绑定到属性之外,我找不到任何方法来执行此操作Tag,如下所示:

Tag={Binding SomeValue, Converter={StaticResource GetObjectFromValueConverter}}
Text={Binding Tag.TextField, RelativeSource={RelativeSource Self}}

这显然很麻烦,有限(你只能得到一个Tag字段)并且感觉很滥用。在监控变化的同时,我还能如何实现我想要的TextField

4

1 回答 1

3

您可以绑定DataContext,TextBox而不是Tag. 这将使您的其他绑定更简单:

DataContext="{Binding SomeValue, Converter={StaticResource GetObjectFromValueConverter}}"
Text="{Binding TextField}"

这假定您在 上没有任何其他TextBox需要继承的绑定DataContext。例如,在下面的绑定中Text2会被破坏:

DataContext="{Binding SomeValue, Converter={StaticResource GetObjectFromValueConverter}}"
Text2="{Binding SomeOtherValue, Converter={StaticResource GetObjectFromValueConverter}}"
Text="{Binding TextField}"

此外,如果您有一个比 更复杂的控件TextBoxDataContext逻辑/视觉树中它下面的任何控件的 也会受到影响。

于 2013-07-17T13:34:44.603 回答