在我的应用程序中,我有一些在主窗口中打开的用户控件。我想打开用户控件并关闭它们。在每个用户控件中,我都有图片、文本框和标签,就像任何信息表单一样。我注意到垃圾收集器没有回收内存。我在互联网上搜索了一个弱点来解决我的应用程序的内存泄漏。我为我的问题找到了一些很好的答案,但其中大部分都与 .net framework 3.5 或更早版本有关。我使用内存分析器根据一些建议找到了线索。当我使用内存分析器时,我发现很多由于绑定到对象而导致的弱引用。这与链接一致,我试图在删除父控件之前删除绑定,但这并没有解决我的问题。这里的xml代码:
<TextBox x:Name="nameTextBox" Text="{Binding Name, Mode=TwoWay}" />
我将 DataContext 设置为我的模型的一个实例。我的模型如下
public class MyModel : INotifyPropertyChanged
{
private string name;
public string Name
{
get { return name; }
set
{
if (name!= value)
{
name= value;
OnProperyChanged("Name");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnProperyChanged(string propertyName)
{
if (PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}`
...
}
我尝试使用以下代码清除我的绑定:
BindingOperations.ClearBinding(nameTextBox,TextBox.TextProperty);
但弱参考并没有消失。我找到了一个有用的代码项目页面,但它是用于事件处理程序的。最后,如果我误解了我提到的链接,请给我一个线索,我必须做什么?如果有其他绑定解决方案。
注意:我已经看到了链接,我知道我必须摆脱以下元素:
- 父窗口中对象的事件处理程序
- 从静态对象注册事件
- 使用定时器
- 数据绑定
- 更改文本框的 Text 属性