仍在学习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。它似乎只是抓住内存中的数据。