2012-01-25 8 views
7

Sabit sayıda sütun ve bilinmeyen sayıda satır içeren bir Kılavuzum var. Satır sayısı, kurucuda bir kez ayarlanır. Ben ettikBir ItemsDanıtım Alanı'nda bir Izgaraya bir RowDefinition'ı dinamik olarak nasıl ekleyebilirim?

<ItemsControl Name="myItemsControl" ItemsSource="{Binding Cells}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid Name="myGrid"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition/> 
        <ColumnDefinition/> 
        <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 
       <Grid.RowDefinitions> 
        <!-- some rows should be added here --> 
       </Grid.RowDefinitions> 
      </Grid> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style.../> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 

aşağıdaki kod satırını çalışır ancak null döndürür:

object obj = myItemsControl.Template.FindName("myGrid", myItemsControl); 

nasıl kodunda "myGrid" satır ekleyebilirsiniz?

cevap

22

Siz bu özellikler ayarlamak veya değiştirildiğinde RowDefinitions ve ColumnDefinitions modifiye bir Grid için attached properties kullanabilirsiniz.

Bu size, Grid böyle yazmak sağlayacaktır:

<Grid local:GridHelpers.RowCount="{Binding MaxGridRow}" 
     local:GridHelpers.ColumnCount="3" /> 

Sonra sadece Cells koleksiyonunda büyük satır numarasını döndürür sizin ViewModel bir özellik ortaya.

Bu özelliklerin ayrıntılı bir uygulamasını on my blog bulabilirsiniz.

+0

Çok teşekkürler. Ben rahatlamış hissediyorum :) ve bu arada son iki yöntemde küçük bir hata oldu. Bunları değiştirdim: GetStarColumns (grid) .Split (','); – Bijan

+0

@Bizz Teşekkür ederim :) Kodu ilk defa wordpress'e kopyaladığımda tüm özel karakterlerden kurtuldum ve tek tırnakları yanlışlıkla çift tırnak ile değiştirdim. Fazladan '.ToString()' oradaydı çünkü yıldız sütunları/satırları bir gün birden çok yıldız sütununa ihtiyaç duymadan önce bir tamsayıymış ve bir dizeye güncellemeye karar verdiler. – Rachel

+1

Bağlantıyı siteye bağlama bozuk, bunu bilmelisiniz, Temel fikri (ekli özellikleri ve özellik değiştiren işleyiciyi ızgarayı sırayla değiştirir) sunmanız gerekir ve bağlantı tembel insanlar için yalnızca uygulama ayrıntılarıdır. –

-1

Yalnızca myItemsControl.GetTemplatedChild("myGrid") kullanım talimatını kullanın. Ayrıca, yukarıdaki ifadeyi kullanmaya başlamadan önce kontrolün yüklenmesi gerekir.

+0

'ItemsControl'' GetTemplateChild' yöntemine sahip değil – Bijan

9
var rowDefinition = new RowDefinition(); 
rowDefinition.Height = GridLength.Auto; 
grid.RowDefinitions.Add(rowDefinition); 
+0

Bu yardımcı olmaz. 'MyGrid' ismine kodun içinden giremiyorum. – Bijan

+0

i can ... bu benim için iyi çalıştı – WtFudgE

+0

Bir ItemsControl öğesinin ItemPanelTemplate olduğunda * ne olursa olsun * erişemezsiniz. @WtFudgE muhtemelen bundan başka bir şey yapıyorsunuz. –

İlgili konular