2010-01-05 102 views
0

在之前的文章中,我被建議使用DataTemplate來渲染一組按鈕和標籤,它的工作原理非常奇妙。問題是我有幾組按鈕,我想區分一組。我計劃使用AlternatingIndex以不同的方式爲每個組着色,但這還不夠 - 每個組實際上也需要打印其索引。添加ItemsControl項目時添加

這裏是一個人爲的例子...讓我們說這個項目看起來是這樣的:

 Lock Door 
Safe Unlock Door 
     Sound Alarm 

如果我有一屋子的這些保險箱的,我想知道我在訪問哪一個。因此,我希望列表如下所示:

  Lock Door 
Safe #1 Unlock Door 
     Sound Alarm 

     Lock Door 
Safe #2 Unlock Door 
     Sound Alarm 

My ItemsControl(ListBox)在代碼隱藏中綁定到List。在做了一些關於SO的研究後,似乎我需要以某種方式綁定ItemsControl.Count屬性。我有一個想法是通過IValueConverter傳遞內容。內容將數據綁定到ItemsControl.Count。然後,IValueConverter會將該字符串格式化爲「安全#{0}」。

這是數據綁定的一部分,我再次徘徊不前。這個ItemsControl的DataContext是我的ViewModel ...所以我只能猜測我需要指定一個綁定,它會給我ItemsControl而不是ViewModel。

這是正確的想法嗎?如果是這樣,有人可以幫我綁定?如果不是,我可以嘗試其他什麼方法?

回答

3

要提供表示集合中項目索引的綁定屬性,請將AlternationCount屬性設置爲某個巨大值(大於集合中項目的最大可能數量),然後您可以將其綁定到因此,你的數據模板:

{Binding RelativeSource={RelativeSource TemplatedParent}, 
     Path=TemplatedParent.(ItemsControl.AlternationIndex)} 

此外,你必須調整你的交替計算轉換做模量的代碼,因爲你不再自動循環索引(因爲AlternationCount大值)。

+0

太棒了,這完全沒有把戲。當我閱讀有關使用AlternationIndex製作交替背景顏色的信息時,我完全錯過了AlternationCount的要點。謝謝。 – Dave 2010-01-05 17:28:05

+0

一個快速相關的問題 - 如果我想獲得「安全」的索引,我應該從內容中解析出數字,還是有更好的方法?我無法使用SelectedIndex,因爲不能保證在用戶單擊按鈕時選擇了該項目。 – Dave 2010-01-05 17:48:25

+0

這個解決方案沒有給你安全的索引嗎? – 2010-01-05 18:00:05

0

@Aviad:謝謝,我會試試!爲了完成,我想發佈我剛剛嘗試過的內容。我終於得到了數據綁定工作,我曾提議道:

<Label Grid.Row="1" Grid.Column="0" Content="{Binding Path=Items.Count, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"></Label> 

最終的結果是錯誤的 - 所有的列表框項有指標「4」,所以我想所有標籤的內容變將物品添加到容器後進行評估。有趣!