【发布时间】:2020-05-22 12:32:10
【问题描述】:
我已经阅读了与此类似的问题的其他问题,但它并没有完全要求解决这个简单场景:
namespace View
{
/// <summary>
/// Interaction logic for PuzzleSelectionScreen.xaml
/// </summary>
public partial class PuzzleSelectionScreen : Page
{
public PuzzleSelectionScreen(PuzzleControllerVM puzzleControllerVM, ScreenSwitcher screenSwitcher)
{
InitializeComponent();
// My button needs a command in screenSwitcher (View) to change Page ..
// .. with a Property (puzzle data) from puzzleControllerVM (View Model)
this.DataContext = puzzleControllerVM;
this.DataContext = screenSwitcher;
}
}
}
我可以将screenSwitcher 粘贴在puzzleControllerVM 中并仅通过this.DataContext = puzzleControllerVM; 访问所有属性,但这会违反MVMM,因为screenSwitcher 包含许多视图对象。
我在上面所做的,DataContext 将分配给screenSwitcher,只是因为它最后执行,但我想要一个方便的解决方案,这样我的 DataContext 就可以访问这两个源,而不必将我的 screenSwitcher 粘贴在我的查看模型类PuzzleControllerVM。
【问题讨论】:
-
创建两个构造函数。一个有参数PuzzleControllerVM,一个有参数ScreenSwitcher,
-
听起来 PuzzleSelectionScreen View / VM 应该是 ScreenSwitcher View / VM 的子项
-
为什么
ScreenSwitcher“包含许多视图对象”? 这违反了 MVVM 模式。切换屏幕应该是视图模型的一部分,并且不包括任何视图对象。
标签: c# wpf data-binding datacontext