DisplayDataMember和ItemTemplate有什么区别,何时使用另一个?

时间:2013-10-26 01:55:56

标签: wpf combobox

正如标题中所提到的,我想知道DisplayDataMember和ItemTemplate之间的区别。我试图将它们一起使用,并且我得到了一个错误,它不能同时使用。我也想知道何时使用其中一个。

我是新手。如果这不是一个好问题,请原谅我。

1 个答案:

答案 0 :(得分:2)

DisplayMemberPathItemTemplate是表示数据的两种方式。 第一个只允许您允许字符串表示,而其他允许您根据需要自定义组合框内容(不仅仅是字符串表示)。由于错误状态,您无法同时定义两者。

假设您有TestClass,其属性为Name。

public class TestClass
{
   public string Name { get; set; }
}

现在,您可以使用此类对象的集合绑定到组合框的ItemsSource。

没有DisplayMemberPath和ItemTemplate

<ComboBox ItemsSource="{Binding Objects}"/>

enter image description here

使用DisplayMemberPath

<ComboBox ItemsSource="{Binding Objects}" DisplayMemberPath="Name"/>

enter image description here

使用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>

enter image description here

我希望图像是自我解释的。如果需要进一步澄清,请告诉我。

此外,您可以在类上使用DisplayMemberPath方法实现overriding ToString()功能,因为它在内部调用数据项上的ToString()。

public class TestClass
{
   public string Name { get; set; }
   public override string ToString()
   {
       return Name;
   }
}