gpt4 book ai didi

c# - 获取 ComboBox 的 SelectedItem (MVVM)

转载 作者:行者123 更新时间:2023-12-03 10:28:06 25 4
gpt4 key购买 nike

我想使用 MVVM 模式(初学者)获取 ComboBox 的选定项。
我读过这可以通过将 SelectedItem 属性绑定(bind)到 ViewModel 中的属性来实现。

XAML:

<ComboBox ItemsSource="{Binding RoomLockerLinkCollection}" 
DisplayMemberPath="Room.Name"
SelectedItem="{Binding SelectedRoom}"/>

View 模型:
public Room SelectedRoom { get; set; }

但它不起作用 - 唯一发生的事情是该 ComboBox 周围出现红色边框 - 此外,在 ComboBox 中选择一个新项目后,我的 VM 中的“SelectedRoom”属性仍然为空。

编辑 1:

一个简短的附加问题:

绑定(bind)工作正常 - 至少对于顶级“类别”。我的 Wrapper-Class 还包含一个储物柜列表。
<ComboBox DataContext="{Binding SelectedItem, ElementName=_cmbRoomSelection}" ItemsSource="  {Binding LockerCollection}" DisplayMemberPath="Name" SelectedValue="{Binding SAVM.SelectedLocker, Mode=TwoWay}" />

当我检查 SelectedValue 的类型时,它是一个“储物柜”——很好。
但是我的 VM 中的 SelectedLocker-Property 保持为空...

另外,可以。解释何时使用“SelectedItem”和“SelectedValue”?有什么不同?在上面的xaml代码中设置DataContext不能通过绑定(bind)SelectedValue来完成...

编辑 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 绑定(bind)到您的 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}" />

关于c# - 获取 ComboBox 的 SelectedItem (MVVM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27957944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com