【问题标题】:Using WPF/MVVM, how do I pass the SelectedIndex value of a Listbox to my ViewModel?使用 WPF/MVVM,如何将 Listbox 的 SelectedIndex 值传递给我的 ViewModel?
【发布时间】:2019-01-16 12:05:05
【问题描述】:

我需要获取列表框的当前 SelectedIndex 并将索引号传递给我的 ViewModel。然后使用该索引号访问对象列表中的特定对象,然后将其用作公式的一部分。我看过的大多数示例都建议使用 SelectedItem 而不是 SelectedIndex,但列表框由位图图像组成,所以我不确定它是如何工作的。

这是一个应该如何工作的示例:

  • 用户选择了其中一张图片,比如说第一张,所以 SelectedIndex 将等于 0。

  • 0 的值被传递给具有“记录”对象列表的 ViewModel。

  • 由于传递了 0,因此访问列表中的第一个对象,并在公式中使用它的一个属性。

这似乎是一件非常简单的事情,但我在 MVVM 和 WPF 方面的新手经验让我有点难过。

【问题讨论】:

  • 您好,您可以在视图模型中保留整数属性,例如 publin int SelectedRecordIndex {get;set;}。在您的 ListBox 中,您应该设置 SelectedIndex = "{Binding SelectedRecordIndex }"

标签: c# wpf xaml mvvm


【解决方案1】:

我认为您可以将 ViewModel 中的属性(假设它称为 SelectedIdx)绑定到 SelectedIndex ,绑定模式可以选择 OneWayToSourc 或 TwoWay。

所以,当你选择一个项目时,你的 viewModel 会通过 SelecteIdx 获取 selectedIndex。

【讨论】:

  • 好吧,这行得通。有没有办法同时更新另一个属性?因此,如果我有一个绑定到名为 CurrentRecord 的属性的标签,是否可以将 CurrentRecord 更改为等于 Record[SelectedIndex].Name,然后在用户单击图片后立即更新标签?单击新图片后,我无法弄清楚如何强制标签更新。 ViewModel 已经实现了 INotifyPropertyChanged。
  • 您可以为选中的项目执行命令。有一个名为 RecordInView 的属性,然后将 SelectedItem 传递给此属性。另一种解决方案是将所选项目绑定到一个属性,并将该属性设置为显示在另一个字段上。
  • 请注意,您不需要显式设置绑定模式。 ItemsControl 的 SelectedItem、SelectedValue 和 SelectedIndex 属性默认绑定 TwoWay。
猜你喜欢
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 2016-09-23
  • 2020-01-27
  • 2016-11-09
  • 2013-02-02
相关资源
最近更新 更多