2013-10-07 121 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