【问题标题】:Window doesn't update when ViewModel is changed更改 ViewModel 时窗口不更新
【发布时间】:2011-08-09 17:23:07
【问题描述】:

我有一个使用 MVVM 的 WPF 应用程序;当我在我的主窗口 ViewModel 类中更改 ViewModel 时,新的用户控件不会显示在窗口中......原来的那个仍然存在。 ViewModel 如下所示:

public class MainWindowViewModel : ViewModelBase {

    public ViewModelBase Workspace;

    public MainWindowViewModel()
    {
        var w = new CustomerDetailsViewModel();

        SetActiveWorkspace(w);
    }

    void NavigationService_ViewChanged(object sender, ViewChangedEventArgs e)
    {
        SetActiveWorkspace(e.View);
    }

    void SetActiveWorkspace(ViewModelBase workspace)
    {
        Workspace = workspace;
    }
}

我的 XAML 如下所示: < ContentControl Content="{Binding Path=Workspaces}" >

正在触发导航服务 ViewChanged 事件,并且正在使用参数中的正确视图调用 SetActiveWorkspace 方法。但是,在那之后,视图不会重新加载。我在这里错过了什么?

【问题讨论】:

  • 您是否将视图的 DataContext 属性更新为新的 VM?
  • 不,我不是,但我认为我不需要……我为什么要这样做?
  • 您声明要更换虚拟机。视图的 DataContext 是 VM,所有绑定都与 DataContext 相关。视图需要有正确的 VM 作为 DataContext。

标签: wpf mvvm binding view viewmodel


【解决方案1】:

您的 Workspace 属性未引发 PropertyChanged 事件。它应该是这样的:

private ViewModelBase _workspace;

public ViewModelBase Workspace
{
    get { return _workspace; }
    set 
    {
        if (value != _workspace)
        {
            _workspace = value;

            // This raises the PropertyChanged event to let the UI know to update
            OnPropertyChanged("WorkSpace");
        }
    }
}

确保您的 ViewModelBase 实现 INotifyPropertyChanged

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    相关资源
    最近更新 更多