【问题标题】:WPF Toolkit DataGrid MultiSelect with MVVM带有 MVVM 的 WPF 工具包 DataGrid MultiSelect
【发布时间】:2010-12-17 11:11:33
【问题描述】:

我们正在使用 WPF 工具包中的 WPF DataGrid,并且正在使用 MVVM。我在 MVVM 中使用 MultiSelect 时遇到了一些挑战,我确信我只是缺少一些简单的东西。在 DataGrid 中选择一行时,我可以使用 ViewModel 中的“IsSelected”来获取事件。这适用于单个选择。

如果我设置“SelectionMode=Extended”,我仍然只会在选择 DataGrid 中的第一行时获得事件。代码隐藏中的SelectionChanged 会获取每个选择事件,但我真的想在 ViewModel 中进行这项工作。我只是缺少这个 multiSelect 的简单解决方案。我还尝试将 SelectedItems(复数)绑定到一个集合以获取所有这些,但 SelectedItems 是只读的,因此无法绑定。我肯定会很感激有关如何执行此操作的任何想法,因为我无法将此方法从代码隐藏移动到 ViewModel。

【问题讨论】:

    标签: mvvm wpftoolkit viewmodel multi-select


    【解决方案1】:

    您可以在代码隐藏文件中侦听 SelectionChanged 事件并将调用委托给 ViewModel。

    M-V-VM 模式不会从代码隐藏文件中删除所有代码。这是关于关注点分离 - 将视图逻辑放入 ViewModel 并让视图尽可能愚蠢。

    如果您对具体示例感兴趣,可以查看WPF Application Framework (WAF) 的 ViewModel 示例。

    我希望这会有所帮助。

    【讨论】:

    • 嗨 - 感谢您的回复。是的,我确实知道 MVVM 的想法不是完全从背后的代码中消除代码,但我确实相信这个示例的其他答案不包含在背后的代码中的代码。也许解决方案是 AttachedBehavior。我还在找。
    • 我希望能找到更好的东西,但没有运气。我可以将 MVVM Toolkit Light 与 Event To Command 一起使用,但最终只是从代码隐藏的 SelectionChanged 中委派。再次感谢 jbe!
    • 我已经成功地将 MVVM Light Toolkit 的 EventToCommand 作为 EventTrigger 的一部分。我看过 Laurent Bugnion 的示例,发现它非常有用:blog.galasoft.ch/archive/2009/12/17/… 诚然,我没有在数据网格场景中使用过它……只是绑定到其他数据模板。
    猜你喜欢
    • 2016-02-12
    • 2021-08-06
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2013-04-08
    • 2017-10-23
    • 2021-07-04
    • 2010-12-19
    相关资源
    最近更新 更多