![](/img/trans.png)
[英]Getting SelectedItem Issue on ComboBox - MVVM ObservableCollection
[英]Getting SelectedItem of ComboBox (MVVM)
我想使用MVVM模式(初学者)来获取ComboBox的选定项。 我已经读到可以通过将SelectedItem属性绑定到ViewModel中的属性来实现。
XAML:
<ComboBox ItemsSource="{Binding RoomLockerLinkCollection}"
DisplayMemberPath="Room.Name"
SelectedItem="{Binding SelectedRoom}"/>
视图模型:
public Room SelectedRoom { get; set; }
但这是行不通的-唯一发生的是该ComboBox周围出现红色边框-此外,在ComboBox中选择了一个新项目之后,我的VM中的“ SelectedRoom”属性仍然为null。
编辑1:
还有一个简短的问题:
绑定工作正常-至少对于顶部的“类别”而言。 我的包装器类还包含一个储物柜列表。
<ComboBox DataContext="{Binding SelectedItem, ElementName=_cmbRoomSelection}" ItemsSource=" {Binding LockerCollection}" DisplayMemberPath="Name" SelectedValue="{Binding SAVM.SelectedLocker, Mode=TwoWay}" />
当我检查SelectedValue的类型时,它是一个“ Locker”-很好。 但是我的VM中的SelectedLocker-Property保持为空...
另外,是否可以解释何时使用“ SelectedItem”和“ SelectedValue”? 有什么不同? 不能通过绑定SelectedValue在上面的xaml代码中设置DataContext。
编辑2(解决方案):
好,知道了!
正如我发现的那样,我已经重置了DataContext-现在当然找不到Property SAVM。
解:
<ComboBox DataContext="{Binding SelectedItem, ElementName=_cmbRoomSelection}"
ItemsSource="{Binding LockerCollection}"
DisplayMemberPath="Name"
SelectedValue="{Binding SAVM.SelectedLocker **ElementName=_vStorage**, Mode=TwoWay}" />
红色框表示Binding出现验证错误,最常见的错误是BindingSource和BindingTarget不是同一类型。
使用SelectedValue和SelectedValuePath绑定到您的Room对象。
CS:
public class Room
{
public string RoomName { get; set; }
}
public class RoomWrapper
{
public Room Room { get; set; }
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
public List<RoomWrapper> RoomWrappers
{
get
{
var list = new List<RoomWrapper>();
for (int i = 0; i < 10; i++)
{
list.Add(new RoomWrapper { Room = new Room { RoomName = "Room " + i } });
}
return list;
}
}
private Room selectedRoom;
public Room SelectedRoom
{
get { return selectedRoom; }
set
{
selectedRoom = value;
}
}
XAML:
<ComboBox ItemsSource="{Binding RoomWrappers}"
DisplayMemberPath="Room.RoomName"
SelectedValuePath="Room"
SelectedValue="{Binding SelectedRoom, Mode=TwoWay}" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.