我有一个场景,需要在网格中显示一堆数据,但它以如此复杂的方式使用列组和行组,以至于我们无法使用数据网格。我们所拥有的是在 A、B 和 C 行中具有垂直列组 c1 和 c2 的部分组。并且可能会显示此控件的 2 个版本。
A最多可以有5个。每个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 的解决方法,但结果是相同的。