我正在使用WPF MVVM试图找出重新加载我的ViewModel的最佳方法(整个View也能正常工作)。
我的模型背后的数据是从存储在目录中的一系列平面文件中解析出来的。目录的位置保存在.Settings文件中,可以通过弹出窗口显示给用户。
如果用户更改了他们想要使用的目录的更新,我该如何重新创建我的ViewModel,以便正在使用的数据是新目录中的数据?
我想这可能类似于在应用程序运行时更改为其他数据库,如果这是我作为数据存储区所拥有的。目前,我显示一条消息,要求用户重新启动应用程序。
以下是重要的代码:
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;
}
答案 0 :(得分:1)
我会用两个事件来解决这个问题:
INotifyPropertyChanged
。 TrafficSignalRepository
中,我会实现一个事件(例如SaveLocationChanged
),您在为SaveLocation
- Property 然后您可以在ViewModel内注册SaveLocationChanged
事件。在已注册的事件处理程序中,您只需再次调用GetTrafficSignals()
,将新值分配给该字段并引发ViewModel的NotifyPropertyChanged
事件。其余的应该通过数据绑定自动完成。
答案 1 :(得分:0)
您可以使用
重新加载已保存的设置Properties.Settings.Default.Reload();
然后再次致电GetTrafficSignals()
?
尽管如此,我在过去使用Reload方法时遇到了一些问题......