我已经阅读了与此类似的其他问题,但并没有完全解决这种简单情况:
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
包含许多View对象。
我在上面的操作中,DataContext
仅会在最后执行后才分配给screenSwitcher
,但是我想要一个方便的解决方案,因此我的DataContext可以访问两个源,而不必在我的视图中粘贴我的screenSwitcher
模型类别PuzzleControllerVM
。
U可以创建一个新的类型,该类型保留对两者的引用,并将datacontext设置为该类型的实例。
这样的东西
public PuzzleSelectionScreen(PuzzleControllerVM puzzleControllerVM, ScreenSwitcher screenSwitcher)
{
InitializeComponent();
this.DataContext = new Hybrid { PuzzleControllerVM = puzzleControllerVM, ScreenSwitcher = screenSwitcher };
}
public class Hybrid
{
public PuzzleControllerVM PuzzleControllerVM { get; set; }
public ScreenSwitcher ScreenSwitcher { get; set; }
}