2012-07-13 13 views
7

ViewModel'imde her biri başka bir koleksiyon içeren bir nesne koleksiyonum var. Bunu Görünümümde yuvalanmış ListView ItemTemplates kullanarak göstermeye çalışıyorum. BuradaVeri nasıl yuvalanır? ListView ItemTemplates Metro/WinRT?

public ViewModelObject 
{ 
    public ObservableCollection<OuterObject> OuterCollection { get; } 
} 

public OuterObject 
{ 
    public string OuterTitle; 
    public ObservableCollection<InnerObject> InnerCollection { get; } 
} 

public InnerObject 
{ 
    public string InnerTitle; 
} 

Ve ben XAML bu ViewModel kullanmaya çalışıyorum nasıl bir basitleştirme olduğunu: Ben iç ListView kaldırırsanız

<ListView ItemsSource="{Binding OuterCollection}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding OuterTitle}"/> 
       <ListView ItemsSource="{Binding InnerCollection}"> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding InnerTitle}"/> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

, İşte benim ViewModel kodunun bir basitleştirme olduğunu dış ListView bağlama mükemmel çalışıyor. İç koleksiyon nesnesini iç ListView'e nasıl doğru bir şekilde bağlayacağımı anlayamıyorum. İç bağlantıyı, {Binding DataContext.InnerCollection} ve {Binding RelativeSource={RelativeSource TemplatedParent}, Path=InnerCollection} ile denedim, ancak bunların tümü çökmesine neden oldu. Bu yuvalanmış bağlamaya ulaşmak için uygun yol nedir?

DÜZENLEME: Bu Windows Phone 7'den uyarlanması için çalışılmaktadır bir uygulama için olduğunu eklemek gerekir ve WinRT mevcut değildir LongListSelector yerine birini bulmak bir girişimdir.

cevap

8

Çözümü çözdüm! Daha önce denediğim çözümlerimin bir kombinasyonunu gerektirdi. iç içe bir ListView iç toplanması için bağlayıcı doğrudur: Ayrıca

{Binding RelativeSource={RelativeSource TemplatedParent}, 
         Path=DataContext.InnerCollection} 

, iç içe listviews için amacınıza bağlı, ben daha iyi iç koleksiyonu için dış koleksiyonu için bir ItemsView ve bir ListView kullanmak bulundu . Aksi takdirde, iki kontrolün seçilebilirliği birbiriyle çakışır.

+0

Bu benim için çalıştı! Anlamaya çalışırken çıldırdım. Bir sorun - {Binding InnerTitle} öğesini başka bir şeye değiştirmek zorunda kaldınız mı? Tüm ListView öğelerini doğru şekilde oluşturduğumu görüyorum, ancak {Binding InnerTitle} çalışmıyor. – Weston

+0

Nevermind - benim sorunum, 'public string Name', 'public string Name'; set; } 'yapar. – Weston