在Silverlight中绑定属性的次数是否有限制?

时间:2012-06-14 19:40:51

标签: c# silverlight data-binding

我有一个场景,需要在网格中显示一堆数据,但它以如此复杂的方式使用列组和行组,以便我们不能使用数据网格。我们所拥有的是在行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,那么处理的问题就会消失。如果我添加另一个,问题会更早出现。

我已经制作了一张快速图像来展示我在这里谈论的内容: enter image description here 请注意,任何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>

并在我的viewmodel中填充它:

        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。在运行它并让它处理后,因为立即向UI添加15K项需要一点时间我得到一个列表,如果我的ItemsControl中的整数从9640开始。但是,如果我重新加载,我每次都会得到一个稍微不同的数字。它是基于执行时间吗?

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

1 个答案:

答案 0 :(得分:0)

据我所知,没有也没有约束力。

如果我在哪里猜测,我会说你在你的C上覆盖Equals或GetHashCode。 (或者因为您在同一容器中多次使用相同的C实例,不清楚您是否这样做)。当多个项目彼此相等,或者相等的项目不相等时应该是或类似的,可能会发生一些与选择相关的非常奇怪的事情,这与您上面描述的方式有关。确保每个C实例都将生成唯一的相等和/或哈希码值。