正如标题中提到的,我想知道DisplayDataMember和ItemTemplate的区别。我尝试将它们一起使用,但出现无法同时使用的编译器错误。我还想知道何时使用其中一个。
我是新手。如果这不是一个好问题,请原谅我。
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;
}
}