2011-03-21 142 views
0

我可以綁定到名稱屬性? 這似乎並不工作:WPF:如何綁定到名稱屬性

<TextBlock Name="FordPerfect" Text="{Binding Path=Name, Mode=OneWay}"/> 

我做錯什麼了嗎?

編輯
添加ElementName=FordPerfect"解決的問題。我不明白爲什麼只有綁定到Name需要這個,而其他屬性不需要。

注:移動的第二(設計)問題another question(這裏我應該擺在第一次...)

感謝

+1

它應該工作。你是否正確設置了元素/對象的DataContext?或者你有沒有設置它? – grizzly 2011-03-21 11:08:36

+0

如果我使用不同的屬性(例如保證金),它可以工作... – 2011-03-21 11:22:47

+0

嗨!增加了一個新的答案,可能比接受的答案更合適,因爲它依賴於指定元素名稱。使用類型爲'Self'的RelativeSource可以達到同樣的效果,但更乾淨,並且具有更好的可重用性,因爲它也可用於樣式中。 – MarqueIV 2017-01-21 06:18:54

回答

5

我想試試這個:

<TextBlock Name="FordPerfect" 
Text="{Binding ElementName=FordPerfect, Path=Name, Converter={StaticResource conv}, Mode=OneWay}"/> 

這樣,您的TextBlock將成爲綁定的上下文。 如果它不起作用,請觀察輸出窗口,您應該發現綁定錯誤!

+0

解決了,但爲什麼? (看我的編輯) – 2011-03-21 11:36:12

+0

我很驚訝它與其他屬性在第一個地方工作。基本上,綁定需要一個源。要麼你明確地修復source或elementName,要麼修復DataContext。 – 2011-03-21 11:41:02

+0

下面是綁定概述的一個很好的開始:http://msdn.microsoft.com/en-us/library/ms752347.aspx – 2011-03-21 11:43:55

2

你可能會更容易地做到了這一點:

<TextBlock Name="FordPerfect" 
      Text="{Binding Name, Converter={StaticResource conv}, Mode=OneWay, RelativeSource={RelativeSource Self}}"/> 

至於爲什麼:該文本框」的DataContext是不會自動文本框本身。因此綁定到Name嘗試綁定到whateverObjectInDataContext.Name。因此,無論您設置的DataContext事先喜歡:

<TextBlock Name="FordPerfect" DataContext={Binding RelativeSource={RelativeSource Self}} 
      Text="{Binding Name, Converter={StaticResource conv}, Mode=OneWay}"/> 

...或者直接設置來源爲綁定

0

您遇到的問題是Binding,默認情況下,使用元素的DataContext它被用作源代碼。但是,您希望綁定源自身爲TextBlock元素。

WPF有一個名爲RelativeSource的類,顧名思義,它將源設置爲綁定。您可以選擇的其中一種關係是Self,它完全符合您的要求:將綁定的來源設置爲其使用的元素。

下面的代碼:

<TextBlock Name="FordPerfect" Text="{Binding Name, RelativeSource={RelativeSource Self}}" /> 

既然你已經設置與RelativeSource源,指定ElementName你不需要。您也不需要Mode=OneWay,因爲TextBlock.TextProperty已經默認爲單向,因爲它只是輸出。

希望這會有所幫助!