簡體   English   中英

ComboBox綁定TextBlock文本到值DisplayMemberPath

[英]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"/>

但是,是否有另一種方法可以不創建特殊屬性呢?

如果要綁定到值類型,例如stringint ,則可以簡單地使用{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顯示為ComboBoxName屬性內的任何內容。


更進一步,您的要求是您可能需要將不同類型的對象放在單個ComboBox 沒問題,您可以在DataTemplate使用DataType屬性,請參見下文:

<DataTemplate DataType="{x:Type myNamespace:myClass}">
    ...
</DataTemplate>

請注意,這些應該在ResourceDictionary聲明,並將影響該類型顯示的所有對象。 這使您可以定義為給定類型顯示的內容。

實際上,您不能同時設置DisplayMemberPath屬性和特定的ItemTemplate。 它們是互斥的。

你可以在這里閱讀

此屬性[即DisplayMemberPath]是定義默認模板的簡單方法,該模板描述了如何顯示數據對象

因此,如果您需要特定的項目模板,只需不設置組合框的DisplayMemberPath屬性即可(無需這樣做)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM