通过 WPF 视图模型更改源在框架中导航

Posted

技术标签:

【中文标题】通过 WPF 视图模型更改源在框架中导航【英文标题】:navigation in frame by changing the source through WPF view model 【发布时间】:2012-02-17 10:54:31 【问题描述】:

我是 WPF 和 MVVM 的新手。我的 WPF 应用程序的 mainWindowView 中有 Frame。我已将框架的源绑定到视图模型的 SourcePage 属性:

<Frame Name="frame" Content="Frame" Source="Binding Path=SourcePage, Source=StaticResource WindowViewModel,  Mode=TwoWay, UpdateSourceTrigger=PropertyChanged" />

在视图模型中,

public string SourcePage

  get
  
    return _sourcePage;
  
  set
  
    if (value != null)
    
      _sourcePage = value;
       OnPropertyChanged("SourcePage");
    
  

最初,我通过在 viewmodel 构造函数中设置 sourcepage 值在该框架中加载了 selectTest 视图:

public MainWindowViewModel()

   SourcePage ="Std.User/SelectTest.xaml";

现在点击按钮,我需要执行一些数据库操作,然后我想在该框架中加载另一个视图。

您好 Colin,感谢您的即时回复。但我也尝试过,但它没有按预期工作。这是我的代码

public ICommand StartTestCommand

  get
  
    if (_startTest == null)
    
     _startTest = new DelegateCommand(StartTest);
    
    return _startTest;
  

private void StartTest()

  MainWindowViewModel mwvm = new MainWindowViewModel();
  mwvm.SourcePage = "std.user/ChangePassword2.xaml";

【问题讨论】:

【参考方案1】:

要实现这一点:

    将视图模型中的命令 (ICommand) 公开为属性。这可以绑定到Button,单击它会执行您的命令。有关示例,请参阅 MSDN 上的 Commanding Overview。 执行命令时在视图模型中执行所需的数据库逻辑 完成后,将SourcePage 属性更改为下一页。视图将自动更新。

您可能还想在您的视图模型中添加一个IsBusy 布尔属性,这在处理您的数据库活动时是正确的。您可以使用它来禁用您通过绑定查看。

【讨论】:

以上是关于通过 WPF 视图模型更改源在框架中导航的主要内容,如果未能解决你的问题,请参考以下文章

wpf c#通过DependencyProperty绑定两个视图模型不起作用

从视图模型 (WPF) 调用视图中的动画

使用触发器 WPF MVVM 更改图像

如何将 ActiveX 控件挂钩到事件/更改到我的视图模型中?

WPF DataGrid 多选绑定

如何在 play 框架模型中导入 java 扩展?