0

正如标题中提到的,我想知道DisplayDataMember和ItemTemplate的区别。我尝试将它们一起使用,但出现无法同时使用的编译器错误。我还想知道何时使用其中一个。

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

4

1 回答 1

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;
   }
}
于 2013-10-26T09:32:28.767 回答