【问题标题】:Pass Field from one page to another page in WPF using MVVM使用 MVVM 将字段从一页传递到 WPF 中的另一页
【发布时间】:2017-11-03 08:12:01
【问题描述】:

我们正在创建一个项目,其中有一个 WPF 应用程序页面,它将从三个中选择一个保存游戏,然后导航到下一页。我们想知道如何将我们从第一页加载的 GameInstance 传递到第二页。

我们已经在后台代码中实现了这一点,但我们不喜欢在后台代码中包含逻辑,因为我们使用的是 MVVM 架构。

保存窗口的代码

public SaveGameWindow()
{
    InitializeComponent();
}

private void LoadGame1_Click(object sender, RoutedEventArgs e)
{
    var comb = new SaveGameViewModel();
    comb.LoadGame1();
    this.NavigationService.Navigate(comb.TempCombatWindow);
}

private void LoadGame2_Click(object sender, RoutedEventArgs e)
{
    var comb = new SaveGameViewModel();
    comb.LoadGame2();
    this.NavigationService.Navigate(comb.TempCombatWindow);
}

private void LoadGame3_Click(object sender, RoutedEventArgs e)
{
    var comb = new SaveGameViewModel();
    comb.LoadGame3();
    this.NavigationService.Navigate(comb.TempCombatWindow);
}

我们想知道的是如何实现与上面相同的东西,但在我们的 ViewModel 中用于保存游戏。

问题是,当我们更改页面时,我们使用 NavigationService,但这在 ViewModel 中不可用,而且我们还没有找到将此属性绑定到所述 ViewModel 的方法,因此我们可以使用某种委托。

我希望这个问题不会让人困惑。

【问题讨论】:

    标签: c# .net wpf mvvm navigationservice


    【解决方案1】:

    您可以在视图模型中使用 ICommand 和命令参数并使用事件来执行此操作。 你可以为你的命令实现一个接口like this one

    • 在您的视图模型中实现接口并创建如下函数:

      private void LoadGame(object parameter) { switch (parameter.ToString()) { case "1": LoadGame1(); break; case "2": LoadGame2(); break; case "3": LoadGame3(); break; } ComabtWindowHandler(); }

    • 处理程序将是您将在后面的代码中实现的事件处理程序。但首先你需要一个像这样的 ICommand:

      public ICommand Load { get { RelayCommand<object> load= new RelayCommand<object((parameter) => LoadGame(parameter)); return load; } }

    此属性将绑定在保存按钮的 Command 属性内的 xaml 中。

    • 对于处理程序,首先在您的视图模型中声明一个抽象事件处理程序

      public EventHandler ComabtWindowHandler;

    • 在您的主窗口中,当您加载视图模型时,只需添加将处理事件的 delagate,因此添加这段代码(假设 comb 是您的视图模型的实例):

      comb.ComabtWindowHandler += delegate { this.NavigationService.Navigate(comb.TempCombatWindow); };

    • 最后在 xaml 中,在您的 3 个按钮中绑定 Command 并定义 CommandParameter 属性(在我的示例中,命令参数只是“1”或“2”或“3”。当然按钮 1 会有parameter = "1" ecc...) 但你可以做更复杂的事情

    【讨论】:

    • 工作就像一个魅力。非常感谢朋友
    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多