хорошо, так что я придумаю решение. Прежде, чем я доберусь до этого, позвольте мне представить некоторую предысторию. Приложение, над которым я работаю, использует MVVM Light и WP7Contrib. В этом случае я использую Funq для DI и MVVMLight Toolkit. После того, как я опубликовал свой первоначальный вопрос, я немного подумал над ним. Я вспомнил видео, которое я смотрел некоторое время назад с MIX2011, под названием Deep Dive MVVM с Laurent Bugnion
http://channel9.msdn.com/Events/MIX/MIX11/OPN03
В нем он говорит только об этой проблеме (просмотр моделей, не живущих одновременно) на Windows Phone. Речь идет о 19-минутной отметке.
В любом случае, после того, как я вспомнил об этом и понял, что локатор ViewModel выставлен в App.xaml, это стало тривиальной проблемой, которую нужно решить. Когда пользователь изменяет параметр Фаренгейта / Цельсия на странице настроек, я просто получаю ссылку на MainViewModel через ViewModelLocator и сбрасываю коллекцию, связанную с пользовательским интерфейсом, таким образом вызывая обновление привязок.
public bool AddOrUpdateValue(string Key, Object value)
{
bool valueChanged = false;
// If the key exists
if (settings.Contains(Key))
{
// If the value has changed
if (settings[Key] != value)
{
// Store the new value
settings[Key] = value;
valueChanged = true;
}
}
// Otherwise create the key.
else
{
settings.Add(Key, value);
valueChanged = true;
}
return valueChanged;
}
public bool ImperialSetting
{
get
{
return GetValueOrDefault<bool>(ImperialSettingKeyName, ImperialSettingDefault);
}
set
{
if (AddOrUpdateValue(ImperialSettingKeyName, value))
{
Save();
RaisePropertyChanged("ImperialSettingText");
var vml = new ViewModelLocator();
vml.MainViewModel.Cities = (App.Current as App).Cities;
}
}
}
С моей стороны было ошибкой не осознавать, что я могу получить доступ к viewModel через ViewModelLocator. Надеюсь, этот пост сэкономит кому-то еще время, затраченное на эту проблему.