2009-02-03 19 views
10

Bir liste kutum var ve Foo nesnesinde bir çubuk koleksiyonu üzerinde yinelemek istiyorum.WPF'de bir ListBoxItem nasıl bağlanır?

<ListBox DataContext="{Binding Path=Foo.Bars}" > 
    <ListBox.Items> 
     <ListBoxItem> 
      <ContentControl DataContext="{Binding Path=.}" /> 
     </ListBoxItem> 
    </ListBox.Items> 
</ListBox> 

Kullanmak istediğim veri sayfası budur.

<DataTemplate DataType="{x:Type Bar}"> 
     <Label Content="hello stackoverflow" /> 
</DataTemplate> 

Ben snoop Eğer

(-> aracını Snoop kullanarak incelemek) Başvurumu, ben fark olduğunu Barlar sadece 1 yerine de ContentControl, bağlıdır tüm koleksiyonu.

Toplamadaki yinelemenin düzgün olması için nasıl düzgün bir şekilde bağlanabilirim?

cevap

3

İlk Window elemanı (IntelliSense) için ad ekleyin: Sonra

xmlns:local="clr-namespace:yourenamespace" 

XAML (Window.Resources bunu yapmak için temiz bir yoldur) Aşağıdaki:

<Window.Resources> 

     <ObjectDataProvider x:Key="DataProvider" ObjectType="{x:Type local:Foo}"/> 

     <DataTemplate x:Key="Template" > 
      <TextBlock Text="{Binding Bar}"/> 
     </DataTemplate> 

    </Window.Resources> 

Yeri Listbox:

<ListBox DataContext="{Binding Source={StaticResource DataProvider}}" ItemsSource="{Binding Bars}" ItemTemplate="DynamicResource Template" /> 

Ancak, d kod arkaplan nesnesindeki efsaneler, nesnenizdeki ortak özellikleri ObservableCollection<> olan (XAML'da nesne örneğiyle bazı kısıtlama kuralları var) başlatmak için bir kurucu ayarlamanız gerekir.

+0

Bunu uygulamam ve işe yaramıyor. – Natrium

+1

Nesne kodunuzu sorunuza yazmanızı öneriyorum. Cevabımda bazı sözdizimi hatası vardı, düzeltdim (Kaynak, Resouce değil, GridView'ı unuttum, hepsini el ile yazdım ...). – belaz

+0

aslında bir ListBox kullanıyorum. İlk önce ListView'i yayınladım, ancak bunu düzenledim. – Natrium

8

Sadece DataTemplate'i ayarlayabilir ve WPF tüm işleri gerçekleştirebilir. ItemsSource öğesini Bar öğesinin bir listesine ayarlayın ve ardından Bar öğeleri için bir DataTemplate tanımlayın.

<ListBox ItemsSource="{Binding Path=Foo.Bars}"> 
    <ListBox.Resources> 
     <DataTemplate DataType="{x:Type Bar}"> 
      <Label Content="hello stackoverflow" /> 
     </DataTemplate> 
    </ListBox.Resources> 
</ListBox> 

Ayrıca <ListBox.ItemTemplate> kullanarak yerine <ListBox.Resources>

MSDN at Data Binding Overview Bkz doğrudan ItemsTemplate ayarlayabilirsiniz.

+0

sağlanan bağlantı ölü gibi görünüyor .. – Default

+0

@Default Evet, bu çürümüş olarak link ve üzgünüm bir yedek bulamıyorum. WPF'deki bağlardan bahseden bir yazıydı. –

İlgili konular