2013-10-07 53 views
1

每次我打開一個視圖的數量得到請求每個模型屬性增加1。只是要清楚,如果我打開一次視圖,關閉它,並再次打開有兩個得到請求每個屬性,如果屬性是設置RaisePropertyChanged(「propertName」)被觸發有兩個得到再次請求。 得到的數量請求總是等於視圖被實例化的次數!我已經調整了這個問題的生活,並且所有的事情都指向了,當視圖關閉並且綁定被隱瞞時,用戶控件不會被丟棄。WPF用戶控件沒有配置

我該怎麼做才能解決這個問題?我已經考慮過處理用戶控件,但是我一直沒有找到幫助解決這個問題的東西。也許我不是在尋找正確的話題?任何幫助或指針將不勝感激 - 謝謝!

+0

我們需要知道您的看法更多細節和你的視圖模型。 – Alberto

+0

@Alberto - 對不起,有什麼特別的幫助?如果您願意,我當然可以發佈所有內容。考慮一下,我的觀點是一個CustomDialog(這基本上是一個自定義窗口) - 問題可以在那裏嗎?窗戶關閉時沒有處理任何兒童? – Sam

+0

你真的**正在關閉**窗口或只是隱藏(設置可見性隱藏)嗎? – sthotakura

回答

3

WPF控件不實現IDisposable,因此不需要處理。 我相信你想說「沒有被標記爲符合垃圾回收的條件」

看來你的問題與所謂的事件引用有關。 您的一些生活實例(您擁有的某個類不是您的窗口/用戶控件)保留對事件的引用。如果關閉窗口或用戶控件,該鏈接仍然生效,並且不會自動清除。

當關閉窗口/用戶控件,你應該提領您的事件這樣

EventName-= methodHandlerthis.UserControlInstance=null

你可以閱讀一些有趣的模式here

+0

好的,我明白你的意思,但我不確定在哪一點做到這一點!當然,我可以一起破解它,可能會讓它看起來在工作,但是我想正確實施它,以確保在幕後正確清理所有內容!那麼,我在想什麼是將它附加到基本窗口關閉事件並將任何用戶控件實例設置爲null?或者我應該在用戶控制自己的某種卸載事件方法中執行此操作? – Sam

+0

在基類關閉事件中掛鉤似乎是正確的做法。 另外,如果你有一個「CloseControl()」方法,你也可以在那裏進行清理。 –

+0

通過使用_BindingOperations.ClearAllBindings()_並將其附加到窗口關閉事件來解決該問題,但我覺得不可思議的是,這個問題不僅限於我的UserControls,它也是標準WPF控件的問題,當窗口關閉時綁定根本不會被刪除!肯定這是一個非常嚴重的錯誤?我很高興發佈任何代碼(對於任何人閱讀),因爲我非常確定這不是我綁定的方式的問題,因爲我正在以標準(沒有特別的)方式進行。接受這個答案爲我指出正確的方向 - 謝謝。 – Sam