[英]ComboBox Binding TextBlock Text to value DisplayMemberPath
我有許多具有不同DisplayMemberPathes的 組合框
我需要使用TextWrapping創建一種樣式
App.xaml:
<Setter Property="ItemTemplate" >
<Setter.Value>
<DataTemplate >
<TextBlock Text="{Binding *what here?*}" TextWrapping="Wrap"/>
</DataTemplate>
</Setter.Value>
</Setter>
組合框:
<ComboBox DisplayMemberPath="val1" />
<ComboBox DisplayMemberPath="val2" />
<ComboBox DisplayMemberPath="val3" />
因此,我知道可以在每個ComboBoxItem類中創建屬性Value並使用它
<TextBlock Text="{Binding Value }" TextWrapping="Wrap"/>
但是,是否有另一種方法可以不創建特殊屬性呢?
如果要綁定到值類型,例如string
或int
,則可以簡單地使用{Binding}
,這是一個示例:
<DataTemplate >
<TextBlock Text="{Binding}" TextWrapping="Wrap"/>
</DataTemplate>
這種綁定將綁定到對象本身 ,而不是綁定到該對象的屬性 。
注意 : Text
顯示的內容將是該對象上.ToString()
方法返回的內容。
然后,您可以在類中重寫.ToString()
方法以返回有用的內容,如下所示:
public class MyClass
{
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
這將強制MyClass
顯示為ComboBox
的Name
屬性內的任何內容。
更進一步,您的要求是您可能需要將不同類型的對象放在單個ComboBox
。 沒問題,您可以在DataTemplate
使用DataType
屬性,請參見下文:
<DataTemplate DataType="{x:Type myNamespace:myClass}">
...
</DataTemplate>
請注意,這些應該在ResourceDictionary
聲明,並將影響該類型顯示的所有對象。 這使您可以定義為給定類型顯示的內容。
實際上,您不能同時設置DisplayMemberPath
屬性和特定的ItemTemplate。 它們是互斥的。
你可以在這里閱讀
此屬性[即DisplayMemberPath]是定義默認模板的簡單方法,該模板描述了如何顯示數據對象
因此,如果您需要特定的項目模板,只需不設置組合框的DisplayMemberPath屬性即可(無需這樣做)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.