- WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part18
868 :デフォルトの名無しさん[sage]:2015/03/08(日) 02:05:08.02 ID:k1c7apXc - コンボボックスを持つダイアログがあります。
(ItemsSourceには親のコレクション、SelectionChangedイベントを定義) 親からそのダイアログをShowDialog()で立ち上げた後だと、そのダイアログが閉じられた後(ダイアログ側でthis.Close()を実行)も 親のコレクションをクリアするとダイアログのSelectionChangedイベントが飛んで来るのは何を忘れているんでしょう…? ダイアログを閉じた後はちゃんとnull突っ込んでガベコレも行っています。 ソースも用意してあるのですが、どっかいいup先ありますか? Win7(64bit) + vs2010pro(.net4)
|
- WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part18
870 :デフォルトの名無しさん[sage]:2015/03/08(日) 03:10:47.38 ID:k1c7apXc - >>869
ダイアログが開いている間だったらそれでいいんですけど、 ダイアログを破棄した後も(ダイアログの)イベントがやって来るので何か忘れてるのかなと思いまして。
|
- WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part18
872 :868[sage]:2015/03/08(日) 20:38:29.06 ID:k1c7apXc - SelectionChangedはxaml上で登録。登録解除はしてないです。
d = new ダイアログ(); d.Owner = this; d.ShowDialog(); d = null; GC.Collect(); GC.WaitForPendingFinalizers(); ってやってるんですが、この後コレクション.Clear()を実行するとダイアログのSelectionChangedが飛んで来ます。 登録したイベントはダイアログ側でthis.Close()の前にきっちりと登録解除してやらないと、 d = nullってやってもダイアログの実体は消されないということでしょうか …というかソースupしたい
|
- WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part18
874 :868[sage]:2015/03/08(日) 21:00:25.81 ID:k1c7apXc - ここでいいのかわかんないけどソースupしました。
http://nullpoarchives.orz.hm/uploader/upload/File14843.zip 解凍pass : 1410523389 Owner設定とShowDialog()は(>>872とは違い)ダイアログ側でやってましたが関係ないよね?
|
- WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part18
875 :デフォルトの名無しさん[sage]:2015/03/08(日) 21:01:57.59 ID:k1c7apXc - >>873
ごめん書き込みに気付かなかった。 GCについての指摘、ありがとうございます。 苦し紛れで入れたものですが、消しておきます。
|
- WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part18
878 :デフォルトの名無しさん[sage]:2015/03/08(日) 21:41:34.55 ID:k1c7apXc - >>876-877
余計なものを全部削ぎ落として現象を再現させるためだけのソースなので SelectionChangedがこのソースではただあるだけになっています。 また、本来のソースでは参照先の切り替えもあるのでItemsSourceはコード側の定義になっています。 指摘いただいた部分、修正してみます
|