【发布时间】:2011-01-28 22:58:23
【问题描述】:
我不确定我遇到的情况是否与此处相同:Silverlight ChildWindow Memory Leak 但是...:
我有一个 Silverlight ChildWindow,在同一个组中包含 3 个单选按钮,并且在 XAML 中 IsChecked 全部设置为 false,我不希望在打开时选择其中任何一个。我从我的视图模型中打开 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 但似乎并非如此。在将 _newLocation 设置为 null 后,我尝试调用 GC.Collect() 但这不起作用,我尝试在 ChildWindow 上将 PartCreationPolicy 设置为 NonShared,但这并没有什么不同,因为 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);
}
}
这里还有其他事情吗?
【问题讨论】:
标签: mvvm silverlight-4.0 mef dispose childwindow