C# 如何在WPF中重新加载ViewModel而不重新启动应用程序?
我正在使用WPF MVVM试图找出重新加载ViewModel的最佳方式(我想整个视图也可以) 我的模型背后的数据是从目录中存储的一系列平面文件中解析出来的。目录的位置保存在.Settings文件中,用户可以通过弹出窗口查看 如果用户更改或更新他们想要使用的目录,我如何重新创建ViewModel,以便使用的数据是新目录中的数据 我想这就像在应用程序运行时切换到另一个数据库一样,如果这就是我作为数据存储的情况。目前,我显示一条消息,要求用户重新启动应用程序 以下是重要的代码:C# 如何在WPF中重新加载ViewModel而不重新启动应用程序?,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在使用WPF MVVM试图找出重新加载ViewModel的最佳方式(我想整个视图也可以) 我的模型背后的数据是从目录中存储的一系列平面文件中解析出来的。目录的位置保存在.Settings文件中,用户可以通过弹出窗口查看 如果用户更改或更新他们想要使用的目录,我如何重新创建ViewModel,以便使用的数据是新目录中的数据 我想这就像在应用程序运行时切换到另一个数据库一样,如果这就是我作为数据存储的情况。目前,我显示一条消息,要求用户重新启动应用程序 以下是重要的代码: public Sign
public SignalViewModel()
{
_trafficSignals = new ObservableCollection<TrafficSignal>(DataAccess.TrafficSignalRepository.GetTrafficSignals());
}
public static List<TrafficSignal> GetTrafficSignals()
{
string dataStore = Properties.Settings.Default.SaveLocation;
var signals = new List<TrafficSignal>();
if (Directory.Exists(dataStore))
{
var files = Directory.GetFiles(dataStore, "CP*.SAV");
Array.Sort(files);
foreach (var file in files)
{
signals.Add(LoadFile(file));
}
}
return signals;
}
公共信号视图模型()
{
_trafficSignals=新的ObservableCollection(DataAccess.TrafficSignalRepository.GetTrafficSignals());
}
公共静态列表GetTrafficSignals()
{
字符串数据存储=Properties.Settings.Default.SaveLocation;
var信号=新列表();
if(目录.Exists(数据存储))
{
var files=Directory.GetFiles(数据存储,“CP*.SAV”);
Array.Sort(文件);
foreach(文件中的var文件)
{
添加(加载文件(文件));
}
}
返回信号;
}
您可以使用
Properties.Settings.Default.Reload();
然后再次调用GetTrafficSignals()
尽管如此,我在过去使用重新加载方法时遇到了一些问题…我将通过两个事件来解决这个问题:
TrafficSignalRepository
中,我将实施一个事件(例如SaveLocationChanged
),该事件是在为SaveLocation
-属性引发设置的PropertyChanged事件后引发的SaveLocationChanged
事件。在已注册的事件处理程序中,您只需再次调用GetTrafficSignals()
,将新值分配给字段并引发ViewModel的NotifyPropertyChanged
事件。其余的应该通过数据绑定自动完成