0

我有一个视图模型设置如下

public class cDriveListVM
{
    public string Drive { get; set; }
    public cDriveListVM(string name)
    {
        Drive = name;
    }
}

我在窗口中声明了 observablecollection 并将其 datacontext 设置为这个 observable 集合。

public ObservableCollection<cDriveListVM> DriveList { get; set; }
private void dl()
{
    DriveList = new ObservableCollection<cDriveListVM>();
    DriveList.Add(new cDriveListVM("drive 1"));
    DriveList.Add(new cDriveListVM("drive 2"));
    this.DataContext = DriveList;
}

用于组合框的 XML:

<ComboBox x:Name="Drive_ComboBox" ItemsSource="{Binding Path=Drive}" HorizontalAlignment="Center" IsReadOnly="True" Grid.Column="0" Grid.Row="0" Width="300" Margin="10" SelectionChanged="Drive_Changed" Height="22" VerticalAlignment="Top"/>

我只是在学习如何使用 Viewmodel,所以我不确定我做错了什么,任何帮助将不胜感激。我更新了导致以下组合框的 xml 文件。

在此处输入图像描述

4

1 回答 1

3

这段代码有一些问题。

一、绑定设置错误。由于 viewmodel 集合的属性是DriveList,绑定应该是ItemsSource="{Binding Path=DriveList}"

二,您试图从您的视图模型中显示一个字段,这是不可行的。WPF 的绑定引擎只适用于属性,因此 viewmodel 应该有一个属性:

public string Drive { get; set; }

最后,DisplayMemberPath应该匹配 viewmodel: 中的属性名称DisplayMemberPath="Drive"

更新:我刚刚注意到它DataContext本身就是可观察的集合——我可能在第一次阅读时错过了它。在这种情况下,您希望直接绑定到数据上下文:

ItemsSource="{Binding}"

并设置DisplayMemberPath为您要显示的属性:

DisplayMemberPath="Drive"
于 2013-08-14T21:11:17.580 回答