作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们一直在使用基于(或完全)在 Dan Wahlin's Blog 中描述的 DataContextProxy 概念。 .从功能上讲,这对我们的目的来说效果很好。但是,在进行了广泛的内存分析之后,并且在在线发现了类似的报告(下面的链接)之后,这种方法似乎由于 UserControl.Resources 的问题/错误而泄漏了内存。
有没有人找到 DataContextProxy 方法的不错替代方案?
Connect Report ,表示该问题已在 SL 5 中得到解决。我将尝试发布 SL4 的重现解决方案。
最佳答案
我想出了一些非常接近 DataContextProxy 的东西,但不是在类的 Loaded 事件中创建绑定(bind),而是 XAML 中的声明绑定(bind)回类。似乎工作原理完全相同,只是它不泄漏。
希望别人来验证这一点。
<UserControl.Resources>
<local:DataContextProxy x:Key="DataContextProxy" ViewModel="{Binding Path=DataContext, ElementName=LayoutRoot, Mode=TwoWay}" />
</UserControl.Resources>
namespace Silverlight.Infrastructure
{
/// <summary>
/// Refactored to not leak. Set binding on ViewModel propery to DataContext of page, in Resources of page
/// Binding in XAML on declaration of DataContextProxy
/// Usage: <shared:DataContextProxy x:Key="DataContextProxy" ViewModel="{Binding Path=DataContext, RelativeSource={RelativeSource Self}, Mode=TwoWay}" />
/// </summary>
/// <remarks></remarks>
public class DataContextProxy : DependencyObject
{
public static DependencyProperty ViewModelProperty = DependencyProperty.Register("ViewModel", typeof (object), typeof (DataContextProxy), new PropertyMetadata(default(object)));
public object ViewModel
{
get { return (object)GetValue(ViewModelProperty); }
set { SetValue(ViewModelProperty, value); }
}
}
}
DataToBindTo="{Binding ViewModel.DataToBindTo, Source={StaticResource DataContextProxy}}"
关于Silverlight:替代使用 DataContextProxy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6257981/
我们一直在使用基于(或完全)在 Dan Wahlin's Blog 中描述的 DataContextProxy 概念。 .从功能上讲,这对我们的目的来说效果很好。但是,在进行了广泛的内存分析之后,并且
我在 WPF 应用程序中使用 DataContextProxy 时遇到问题。当我将 DataContextProxy 放在网格的资源部分时,它永远不会加载。如果我将 DataContextProxy
我是一名优秀的程序员,十分优秀!