2012-06-14 66 views
1

我有一堆數據需要在網格中顯示的場景,但它以如此複雜的方式使用列組和行組,使得我們無法使用數據網格。我們所擁有的是具有垂直列組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,以便處理更少,則問題消失。如果我添加另一個,則問題會更早發生。

我畫了一個快速的圖像顯示什麼,我這裏所說的: enter image description here 注意,任何的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的解決方法,但結果是一樣的。

回答

0

據我所知,沒有和沒有約束力的限制。

如果我在哪裏猜測,我會說你在C上覆蓋Equals或GetHashCode。 (或者因爲你在同一個容器中多次使用相同的C實例,不清楚你是否這樣做)。當多個項目彼此相等,或者相同的項目不相同時,應該是相似的或者相似的,與選擇相關的一些非常奇怪的事情可能發生,就像上面描述的那樣。確保每個C實例都將生成唯一的相等和/或哈希碼值。

+0

每次我去演示C時,它都會檢查ViewModel中的屬性(通過RelativeBinding完成),而不是C的每個實例。它與項目比較無關,我不重寫Equals或GetHashCode。 – McAden

相關問題