如何在 MVVM Light 的 ListView 中的 ComboBox 中显示列表?

How to show a List in a ComboBox in a ListView in MVVM Light?

我有一个对象,它有一些属性,例如名称、日期,然后是 属性 列表标签。 属性 是标签列表。我想显示一个带有名称的 ListView,然后是一个带有该标签列表中所有名称的 ComboBox。

像这样:

 <ListView Grid.Row="3"
                  Margin="10,0,10,0"
                  ItemsSource="{Binding ObjectList}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Name}"
                                   Foreground="Black" />
                        <ComboBox ItemsSource="{Binding Tags}" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
 </ListView>

这是我在 ViewModel 上的 ObservableCollection:

 private ObservableCollection<MyObject> _ObjectList = new ObservableCollection<MyObject>();
 public ObservableCollection<MyObject> ObjectList
 {
     get
     {
          return _ObjectList;
     }
     set
     {
          _ObjectList = value;
          RaisePropertyChanged("ObjectList");
     }
 }

如何将这些名称放入 ListView 的 ComboBox 中?在那个 ComboBox 中,我看到 App1.Model.Object 5 次!里面有5个项目,但我想显示名称。

您必须定义 属性 应该使用什么来命名组合框中的元素。您可以使用 属性 DisplayMemberPath 执行此操作。在此示例中,TagName 是包含项目名称的 属性Name。

<ComboBox ItemsSource="{Binding Tags}" DisplayMemberPath="TagName" />

这很正常,因为您的 Tag 是一个对象,您必须定义要显示的 属性 `

这是一个例子:

 public class Tag
 {
    public string Property1 {get; set;}
    public string Property2 {get; set;}

    public string Description {get; set;}

 }

现在,在您的 XAML 中,您将通过添加 :

来绑定此 属性
 <ComboBox ItemsSource="{Binding Tags}", DisplayMemberPath=Description, Mode=Default/>