2013-07-17 81 views
1

我試圖綁定到一個值,在其上運行轉換器,然後顯示該值的屬性。讓Converter直接返回我想要的屬性將不起作用,因爲我需要跟蹤屬性更改。如何綁定到轉換器返回的對象的屬性

我試圖實現將是這樣的:

// 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的變化時我還能如何實現我想要的?

回答

3

您可以綁定TextBoxDataContext而不是Tag。這將使你的其他綁定簡單得多:

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

這裏假設你沒有在需要繼承DataContextTextBox任何其他綁定。例如,在下面Text2的綁定將被打破:

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

此外,如果你有超過TextBox其他更復雜的控制,DataContext在邏輯/視頻樹下面的所有控件也會受到影響。

+1

這當然假定您沒有其他綁定到您的外部DataContext,但只要這是一個很好的解決方案。 –

+1

@JohnBowen - 好點,我澄清了我的答案。 – CodeNaked

+0

但是如果我想將文本綁定到一個對象 - >轉換器 - >屬性和TextWrapping到另一個呢?使用DataContext for一個和標記(通過RelativeSource FindAncestor引用前一個DataContext)爲另一個?似乎非常hackish ..如果我想要3呢? – Mania

相關問題