【问题标题】:Binding itemsource to multiple Collections in the view model将 itemsource 绑定到视图模型中的多个集合
【发布时间】:2013-10-19 19:30:02
【问题描述】:

我有 5 个按钮和一个列表框

每次单击按钮时,我都想将 ListBox itemssource 绑定到 Button 引用的不同集合。

到目前为止,我的想法是 制作一个带有一个参数的单个命令,例如按钮名称并调用一个包含 switch 语句的函数,然后在代码中更改 itemssource 绑定。

我是 mvvm 的新手,你能给我一个更好的方法吗?

【问题讨论】:

  • 我认为这是最好的方法。将按钮作为 CommandParameter 传递,以便您拥有按钮对象而不是字符串。您可以通过让按钮修改属性然后让 ListBox 基于此触发其数据上下文的更改来以另一种方式执行此操作,但这有点过头了。你的方式很干净,很好。
  • @MillieSmith 我问这个问题是因为我想保持它干净而不是在后面的代码中进行绑定
  • 我知道。将相同的命令挂接到所有按钮,并将按钮作为 CommandParameter 传递。然后进行切换并在其中设置列表框的 itemssource。我真的认为这是最干净的方式。
  • 顺便说一句,传递按钮可能比传递它的名字更好。
  • @MillieSmith 和我确实必须有一个名为 currentItemsource 的集合并将其值设置为按钮所指的集合?

标签: c# mvvm


【解决方案1】:

首先公开 ViewModel 上的每个集合以及占位符集合CurrentList。然后您可以将您的按钮绑定到相同的命令,但在每个绑定到关联列表的命令参数中:

<Button Command="{Binding SwitchCommand}" CommandParameter="{Binding List1}">List 1</Button>
<Button Command="{Binding SwitchCommand}" CommandParameter="{Binding List2}">List 2</Button>
<ListView ItemsSource="{Binding CurrentList}"></ListView>

在命令的执行方法中,您只需将CurrentList 设置为参数:

_viewModel.CurrentList = (List<string>) parameter;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2021-08-15
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多