gpt4 book ai didi

Silverlight:替代使用 DataContextProxy?

转载 作者:行者123 更新时间:2023-12-04 06:23:46 25 4
gpt4 key购买 nike

我们一直在使用基于(或完全)在 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}}"

将绑定(bind)更改为 ElementName,因为它似乎在最初解决绑定(bind)之后才获得 View 模型的 subview 上工作得更好。

关于Silverlight:替代使用 DataContextProxy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6257981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com