我有很多组合框,有不同的 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"/>
但是如果没有创造特殊财产,可能会有另一种方式吗?
答案 0 :(得分:0)
如果您绑定到值类型,例如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
显示为Name
中ComboBox
属性中的任何内容。
更进一步,您的要求是您可能需要将不同类型的对象放在一个ComboBox
中。没问题,您可以使用DataType
中的DataTemplate
属性,请参阅下文:
<DataTemplate DataType="{x:Type myNamespace:myClass}">
...
</DataTemplate>
请注意,这些内容应在ResourceDictionary
中声明,并会影响显示该类型的所有对象。这允许您定义为给定类型显示的内容。
答案 1 :(得分:0)
实际上,您无法同时设置DisplayMemberPath
属性和特定的ItemTemplate。它们是相互排斥的。
您可以阅读here
此属性[即DisplayMemberPath]是一种定义描述如何显示数据对象的默认模板的简单方法
因此,如果您需要特定的项目模板,只需不要设置组合框的DisplayMemberPath属性(不需要这样做)。