无法将ViewModel绑定到ComboBox

时间:2013-08-14 21:05:59

标签: c# viewmodel

我有一个viewmodel设置如下

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

我在窗口中声明observablecollection并将其datacontext设置为此可观察集合。

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文件,它导致以下变形框。

enter image description here

1 个答案:

答案 0 :(得分:3)

此代码存在一些问题。

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

二,您正在尝试显示视图模型中的字段,这是不可行的。 WPF的绑定引擎仅适用于属性,因此viewmodel应具有属性:

public string Drive { get; set; }

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

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

ItemsSource="{Binding}"

并将DisplayMemberPath设置为您要显示的媒体资源:

DisplayMemberPath="Drive"