Я не уверен, что то, что я испытываю, такое же, как здесь: Утечка памяти ChildWindow Silverlight , но ...:
У меня есть Silverlight ChildWindow с 3переключатели в той же группе с IsChecked все установлены в false в XAML, я не хочу, чтобы какие-либо из них были выбраны при открытии.Я открываю окно ChildWindow из моей модели представления:
if (_NewChildWindowCommand == null)
_NewChildWindowCommand = new RelayCommand(param => _cwService.ShowDialog(_newLocation, new NewViewModel(), closed =>
{
if (_newLocation.DialogResult.HasValue && _newLocation.DialogResult.Value)
{
//do something
}
_newLocation = null;
_newLocation = _container.GetExportedValue<INewChildWindow>();
}));
. Затем я выбираю одну из переключателей и нажимаю кнопку ОК.Он закрывается, я открываю его снова, и ChildWindow, кажется, был удален, так как при открытии ни одна из этих переключателей не выбрана (так, как это должно быть).Поэтому я снова выбираю переключатель, нажимаю ОК, он закрывается ... Но в третий раз, когда я открываю ChildWindow, у него выбирается тот же переключатель, что и при закрытии.Это то, что я не понимаю.Я подумал, установив _newLocation = null, как я сделал, и затем получив INewChildWindow из контейнера, я получу новое ChildWindow, но, похоже, это не так.Я попытался вызвать GC.Collect () после установки для _newLocation значения null, но это не сработало, и я попытался установить для PartCreationPolicy значение NonShared в ChildWindow, однако это не имеет значения, поскольку экземпляр ChildWindow хранится в_newLocation и класс, содержащий _newLocation, не утилизируется:
[ImportingConstructor]
public HomeViewModel(IChildWindowService cwService, INewLocationChildWindow newLocationChildWindow)
{
if (!IsDesignTime)
{
_cwService = cwService;
_newLocation = newLocationChildWindow;
_catalog = new AggregateCatalog();
_catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
_container = new CompositionContainer(_catalog);
}
}
Есть ли здесь что-то еще?