【发布时间】:2018-01-17 21:03:29
【问题描述】:
所以我目前有一个Window 和一个TabControl。 MainWindow 有自己的 ViewModel,所有TabItems 也有自己的 ViewModel。
我可以通过绑定的SelectedIndex 属性轻松地从MainWindow ViewModel 更改选项卡。我想做的是从在另一个选项卡视图模型中运行的代码更改为另一个选项卡。由于选项卡不是 MainWindowViewModel 的一部分,因此我正在寻找一种干净的方法来更改选项卡,而无需求助于后面的代码。
在某些情况下,我可能需要更改选项卡,例如消息提示。我认为我唯一的方法是创建事件并从 MainWindowViewModel 订阅它。
【问题讨论】:
-
由于选项卡不是该 ViewModel 的一部分,这是代码异味。最简单的方法是将集合绑定到包含每个页面视图模型的选项卡控件上的 ItemsSource,然后绑定到 SelectedItem 并将任何页面视图模型应该是该属性中的选定选项卡。这是最简单、最简单、最有用和最可靠的方法。你为什么不那样做? (这是给你的工作原型stackoverflow.com/a/5651542/1228)
-
@Will 我认为你完全错过了理解我的问题。我没有生成新的视图模型。每个选项卡都有自己预先建立的视图模型,我正在寻找一种简单的方法来从选项卡视图模型的 MainWindow 视图模型中设置
SelectedIndex数据绑定。实际上,我已经找到了一种简单的方法,我即将发布。
标签: c# wpf mvvm tabcontrol