C# 捕获;“切换工作区”;MVVM中的事件

C# 捕获;“切换工作区”;MVVM中的事件,c#,wpf,mvvm,C#,Wpf,Mvvm,我使用Josh Smith()提供的MVVM模式构建了一个应用程序 当我在应用程序中打开多个工作区时,我希望捕获切换工作区/选项卡的事件,以便首先保存当前工作区的内容。我已经浏览了WorkspaceViewModel和ViewModelBase,但不知道如何添加EventHandler 您应该能够将选项卡的“当前”项绑定到模型中的变量。当这种情况发生变化时,请做好您的工作。我在另一篇文章中找到了一个解决方案,我只需稍微调整一下: 基本上,我已经在TabControl的PreviewMouseDo

我使用Josh Smith()提供的MVVM模式构建了一个应用程序


当我在应用程序中打开多个工作区时,我希望捕获切换工作区/选项卡的事件,以便首先保存当前工作区的内容。我已经浏览了WorkspaceViewModel和ViewModelBase,但不知道如何添加EventHandler

您应该能够将选项卡的“当前”项绑定到模型中的变量。当这种情况发生变化时,请做好您的工作。

我在另一篇文章中找到了一个解决方案,我只需稍微调整一下:

基本上,我已经在TabControl的PreviewMouseDown上添加了一个EventHandler来生成不同的工作空间

private void TabControl_PreviewMouseDown(object sender, MouseButtonEventArgs e) {
        MainWindow_VM dc = (MainWindow_VM)this.DataContext;

        if (IsUnderTabHeader(e.OriginalSource as DependencyObject))
            //Do what need to be done before switching workspace
            // in my case, switch the focus to a dummy control so the objectContext would save everything, even the currently focused textbox

    }

private bool IsUnderTabHeader(DependencyObject control) 
    {
        if (control is TabItem)
        {
            return true;
        }
        DependencyObject parent = VisualTreeHelper.GetParent(control); 
        if (parent == null)         
            return false; 

        return IsUnderTabHeader(parent); 
    }