正如标题中所提到的,我想知道DisplayDataMember和ItemTemplate之间的区别。我试图将它们一起使用,并且我得到了一个错误,它不能同时使用。我也想知道何时使用其中一个。
我是新手。如果这不是一个好问题,请原谅我。
答案 0 :(得分:2)
DisplayMemberPath
和ItemTemplate
是表示数据的两种方式。
第一个只允许您允许字符串表示,而其他允许您根据需要自定义组合框内容(不仅仅是字符串表示)。由于错误状态,您无法同时定义两者。
假设您有TestClass,其属性为Name。
public class TestClass
{
public string Name { get; set; }
}
现在,您可以使用此类对象的集合绑定到组合框的ItemsSource。
没有DisplayMemberPath和ItemTemplate
<ComboBox ItemsSource="{Binding Objects}"/>
使用DisplayMemberPath
<ComboBox ItemsSource="{Binding Objects}" DisplayMemberPath="Name"/>
使用ItemTemplate
<ComboBox ItemsSource="{Binding Objects}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<Rectangle Margin="15,0,0,0" Fill="Red"
Width="10" Height="10"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
我希望图像是自我解释的。如果需要进一步澄清,请告诉我。
此外,您可以在类上使用DisplayMemberPath
方法实现overriding ToString()
功能,因为它在内部调用数据项上的ToString()。
public class TestClass
{
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}