私が経験していることがここと同じかどうかはわかりません: Silverlight ChildWindow Memory Leak but...:
XAML で IsChecked がすべて false に設定された同じグループに 3 つのラジオ ボタンがある Silverlight ChildWindow があります。開いたときにそれらのいずれも選択したくありません。ビューモデルから 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>();
}));
次に、ラジオ ボタンの 1 つを選択して [OK] をクリックします。閉じて、もう一度開くと、開いたときにこれらのラジオボタンが選択されていないため、ChildWindowが破棄されたようです(本来あるべき方法)。そこで、もう一度ラジオ ボタンを選択し、[OK] をクリックして閉じます...しかし、3 回目に ChildWindow を開くと、閉じたときと同じラジオ ボタンが選択されています。これは私が理解していないものです。私が行ったように _newLocation=null を設定すると、コンテナから INewChildWindow を取得すると新しい ChildWindow が得られると思いましたが、そうではないようです。_newLocation を null に設定した後で GC.Collect() を呼び出してみましたが、うまくいきませんでした。また、ChildWindow で PartCreationPolicy を NonShared に設定しようとしましたが、うまくいきませんでした。
[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);
}
}
ここで何か他のことが起こっていますか?