我有一个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文件,它导致以下变形框。
答案 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"