![](/img/trans.png)
[英]Silverlight CustomControl dependency property can't be bound to parent viewmodel
[英]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.