繁体   English   中英

在Silverlight中可以绑定一个属性有多少次限制?

[英]Is there a limit to how many times a property can be bound to in Silverlight?

我有一个场景,需要在网格中显示一堆数据,但是它以如此复杂的方式使用列组和行组,因此我们无法使用datagrid。 我们所拥有的是A,B和C行中的节组,垂直列组为c1和c2。 并且可能会显示此控件的2个版本。

最多可以有5个A。每个A最多可以有5个B,每个B具有8个C,每个C在c1中具有5个属性,在c2中具有5个属性。

这些B的每一个打印出C的标签,然后打印出c1的该标签的所有值,然后打印c2下该标签的所有属性。

每个C都可以通过网格外部的不确定复选框隐藏,显示或突出显示。

我遇到的问题是在第5个A周围,它下面的所有C都开始失去与复选框的绑定(通过相对绑定绑定)。

一个属性可以绑定多少次以使其仅停止评估绑定是否有限制? 每个C都有自己的复选框,并且它们都在同一时间发出。 事情全都是ItemsControl,所以它在最后一次迭代中-从完成的前4次开始就没有任何变化,这只是控件的第5次迭代。

如果我删除其中一个C,从而减少了处理工作,那么问题就会消失。 如果添加另一个,则问题较早发生。

我已经绘制了一张快速图像,以显示我在这里谈论的内容: 在此处输入图片说明 请注意,任何C都可以突出显示或隐藏。 但是,在特定点之后,问题是突出显示和隐藏只是停止了。 没有错误,异常,输出窗口中没有任何内容。 绑定只是停止评估。


更新

似乎有一个限制。 如果我使用以下xaml进行测试:

        <ItemsControl ItemsSource="{Binding TestCollection}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Index}" Visibility="{Binding DataContext.TestVisibility, RelativeSource={RelativeSource AncestorType=navigation:Page}}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

并在我的视图模型中像这样填充它:

        List<TestModelObject> initList = new List<TestModelObject>();
        for (int i = 0; i < 15000; i++)
        {
            initList.Add(new TestModelObject(i));
        }

        TestCollection = new ObservableCollection<TestModelObject>(initList);

并在我的ViewModel中将TestVisibility设置为false。 自从一次将15K项添加到UI以来,运行并让其进行处理之后,我会花一会儿才能得到列表,如果我的ItemsControl中的整数从9640左右开始。但是,如果重新加载,每次都会得到一个略有不同的数字。 它基于执行时间吗?

我在Silverlight 5和Silverlight 4中都对此进行了测试。对于Silverlight 4,我当然对RelativeBinding使用了一种解决方法,但结果是相同的。

据我所知,没有而且不应该是有约束力的限制。

如果我猜到了,我会说您在C上覆盖Equals或GetHashCode。 (或者因为您在同一个容器中多次使用同一个C实例,所以不清楚是否这样做)。 当多个项目彼此相等时,或者相等的项目不相等时,应该发生或类似的事情会发生,选择时会发生一些非常奇怪的事情,就像您上面所描述的那样。 确保每个C实例将产生唯一的相等性和/或哈希码值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM