我想使用MVVM模式(初学者)获取ComboBox的选定项目 . 我已经读过这可以通过将SelectedItem属性绑定到ViewModel中的Property来实现 .
XAML:
<ComboBox ItemsSource="{Binding RoomLockerLinkCollection}"
DisplayMemberPath="Room.Name"
SelectedItem="{Binding SelectedRoom}"/>
视图模型:
public Room SelectedRoom { get; set; }
但它不起作用 - 唯一发生的事情是ComboBox周围出现红色边框 - 此外,在ComboBox中选择一个新项目之后,我的VM中的“SelectedRoom”属性仍为空 .
编辑1:
一个简短的附加问题:
绑定工作正常 - 至少对于顶级“类别” . My Wrapper-Class还包含一个储物柜列表 .
<ComboBox DataContext="{Binding SelectedItem, ElementName=_cmbRoomSelection}" ItemsSource=" {Binding LockerCollection}" DisplayMemberPath="Name" SelectedValue="{Binding SAVM.SelectedLocker, Mode=TwoWay}" />
当我检查SelectedValue的类型时,它是一个“Locker” - 很好 . 但我的VM中的SelectedLocker-Property保持为null ...
另外,可以s.o . 解释何时使用“SelectedItem”和“SelectedValue”?有什么不同?在上面的xaml代码中设置DataContext不能通过绑定SelectedValue来完成...
编辑2(解决方案):
好,知道了!
当我发现我已经重置了我的DataContext时 - 现在找不到属性SAVM了 .
解:
<ComboBox DataContext="{Binding SelectedItem, ElementName=_cmbRoomSelection}"
ItemsSource="{Binding LockerCollection}"
DisplayMemberPath="Name"
SelectedValue="{Binding SAVM.SelectedLocker **ElementName=_vStorage**, Mode=TwoWay}" />
1 回答
红色框表示绑定的验证错误,最常见的错误是BindingSource和BindingTarget的类型不同 .
使用SelectedValue和SelectedValuePath绑定到Room对象 .
CS:
XAML: