我想使用MVVM模式(初学者)获取组合框的选定项目。 我读过这可以通过将SelectedItem属性绑定到ViewModel中的属性来实现。获取组合框(MVVM)的SelectedItem
XAML:
<ComboBox ItemsSource="{Binding RoomLockerLinkCollection}"
DisplayMemberPath="Room.Name"
SelectedItem="{Binding SelectedRoom}"/>
视图模型:
public Room SelectedRoom { get; set; }
但它不工作 - 这就是发生的唯一的事情就是围绕着组合框一出现红色边框 - 除了在选择新项目后,组合框中的“SelectedRoom”属性仍然为空。
编辑1:
一个短的附加问题:
的结合工作正常 - 至少在顶部的 “类别”。我的包装类还包含储物柜列表。
<ComboBox DataContext="{Binding SelectedItem, ElementName=_cmbRoomSelection}" ItemsSource=" {Binding LockerCollection}" DisplayMemberPath="Name" SelectedValue="{Binding SAVM.SelectedLocker, Mode=TwoWay}" />
当我检查SelectedValue的类型时,它是一个“储物柜” - 很好。 但我VM中的SelectedLocker属性保留为空...
另外,可以s.o.解释何时使用“SelectedItem”和“SelectedValue”?有什么不同?设置的DataContext在XAML代码上面无法通过绑定的SelectedValue做...
编辑2(解决方案):
好的,知道了!
因为我发现我重置了我的DataContext - 现在属性SAVM当然无法找到。
解决方案:
<ComboBox DataContext="{Binding SelectedItem, ElementName=_cmbRoomSelection}"
ItemsSource="{Binding LockerCollection}"
DisplayMemberPath="Name"
SelectedValue="{Binding SAVM.SelectedLocker **ElementName=_vStorage**, Mode=TwoWay}" />
红色框指示验证错误,你的财产和你的ItemsSource可能不是同一类型。 –
omg你是如此的正确 - 在设置属性的类型来反对我检查使用哪种类型后,我意识到我正在使用这个包装...有没有办法将selecteditem的属性链接到在我的MV的财产?例如我的组合框包含一个roomLockerLink类型的对象,它包含一个房间和一个储物柜列表 - 但是我想提取包含空间的房间以将其保存在我的mv属性中。希望如此得到我想说的话...... – C4p741nZ
是的,一秒钟我会写一个答案。 同时阅读有关SelectValue和SelectedValuePath –