我有一堆數據需要在網格中顯示的場景,但它以如此複雜的方式使用列組和行組,使得我們無法使用數據網格。我們所擁有的是具有垂直列組c1和c2的行A,B和C中的部分組。此控件的2個版本可能會顯示。在Silverlight中可以綁定屬性的次數是否有限制?
最多可以有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次迭代的控制。
如果我刪除其中一個Cs,以便處理更少,則問題消失。如果我添加另一個,則問題會更早發生。
我畫了一個快速的圖像顯示什麼,我這裏所說的: 注意,任何的C可以突出顯示或隱藏。但是,在某個點之後,問題是突出顯示和隱藏只是停止。輸出窗口中沒有錯誤,異常,沒有任何內容。綁定只是停止評估。
UPDATE:
這似乎是有極限的。如果我用下面的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);
,並設置TestVisibility假在我的視圖模型。運行它並讓它進行處理,因爲一次添加15K項目到UI需要一些時間,如果我的ItemsControl中的整數從9640開始,我會得到一個列表。但是,如果我重新加載,每次都會得到一個稍微不同的數字。它是基於執行時間嗎?
我在Silverlight 5和Silverlight 4中都測試了這個。對於silverlight 4我當然使用了RelativeBinding的解決方法,但結果是一樣的。
每次我去演示C時,它都會檢查ViewModel中的屬性(通過RelativeBinding完成),而不是C的每個實例。它與項目比較無關,我不重寫Equals或GetHashCode。 – McAden