トップページ > プログラム > 2015年03月08日 > k1c7apXc

書き込み順位&時間帯一覧

6 位/202 ID中時間01234567891011121314151617181920212223Total
書き込み数0011000000000000000013006



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
868
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part18

書き込みレス一覧

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はコード側の定義になっています。

指摘いただいた部分、修正してみます


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。