多线程WPF C#

时间:2016-10-18 19:14:36

标签: c# wpf multithreading mvvm

仍在学习MVVM和多线程,并且遇到了一些我无法弄清楚的事情。

用户通过Datagrid访问申请人列表,了解他们的特定分支机构位置。他们可以单击datagrid中的按钮以获取SelectedItem,以打开该应用程序的更详细视图。

他们打开这个视图的初始时间,数据是正确的;但是,他们打开视图的任何其他时间仍然显示原始数据。除非关闭并再次打开应用程序,否则它不会在视图中显示第二个申请人信息。

我已经读过ViewModel存储在内存中,我想,也许线程会提供解决方案。我使用以下代码来尝试这个;但是,没有运气。

有人可以指出我如何处理这种情况的正确方向,或者我是否接近这个完全错误。 :)

感谢您的时间。

private void NewWindowHandler(object sender, RoutedEventArgs e)
    {
        try
        {
            Craig_Tools.Data.Globals.selectedAppID = Convert.ToInt32(appIDTextBox.Text);

            Thread newWindowThread = new Thread(delegate()
            {
                Window tempWindow = new Window
                {
                    Title = "Display Applicant",
                    Content = new Craig_Tools.ApplicationTrackingSystem.userControls.atDisplay(),
                    SizeToContent = SizeToContent.WidthAndHeight,
                    //ResizeMode = ResizeMode.NoResize
                };

                tempWindow.Show();
                System.Windows.Threading.Dispatcher.Run();
            });

            newWindowThread.SetApartmentState(ApartmentState.STA);
            newWindowThread.Start();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString(), "Error opening Applicant Display");
        }
    }

我也尝试了以下内容。

  private void NewWindowHandler(object sender, RoutedEventArgs e)
    {
        try
        {
            Craig_Tools.Data.Globals.selectedAppID = Convert.ToInt32(appIDTextBox.Text);

            //create and show window
            atDisplay newView = new atDisplay();
            ViewModels.displayViewModel viewModel = new ViewModels.displayViewModel();
            newView.DataContext = viewModel;    
            newView.Title = "Applicant ID: " + Craig_Tools.Data.Globals.selectedAppID;

            newView.Show();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString(), "Error opening Applicant Display");
        }
    }

我使用Visual Studio调试器想到的是,在尝试打开第二个申请人的信息时,从不执行ViewModel。它似乎只是抓住内存中的数据。

0 个答案:

没有答案