2013-04-30 98 views
1

對於一個項目,我有一個相當複雜的viewModel結構。具有複雜ViewModel結構的ListView

請注意,我忽略了setters中的「NotifyOfPropertyChange」調用!

public class EntityViewModel : PropertyChangedBase 
{ 
    public ObservableCollection<PlatformViewModel> Platforms; 
} 

public class PlatformViewModel : PropertyChangedBase 
{ 
    public ObservableCollection<UnitViewModel> Units; 
} 

public class UnitViewModel : PropertyChangedBase 
{ 
    public ObservableCollection<ModuleViewModel> Units; 

    public string UnitName { get; set; } 
} 

public class ModuleViewModel : PropertyChangedBase 
{ 
    public string ModuleName { get; set; } 
    public string Version { get; set; } 
} 

現在我想它想象在一個列表,像這樣在這裏(只是爲了想要的結果更加清晰)

Visualisation of ViewModels

,其中黑色是平臺,綠色的單位和橙色模塊。

已嘗試使用ListView,但沒有成功。永遠不會顯示單個元素。

所以,問題是:

  • 什麼是去那種可視化的最佳途徑?

  • ListView會是一個不錯的選擇嗎?

  • 有沒有一個很好的例子,我找不到?

+0

應該可以使用ListView。也許甚至純粹的ItemsControl更好。你能顯示你的xaml嗎? – jure 2013-04-30 16:13:16

+0

很多借口,我遲到了這個問題! XAML部分不再是我認爲的問題;) – 2013-04-30 18:13:36

回答

2

爲了讓你開始,有必要進一步自定義佈局。

<ItemsControl ItemsSource="{Binding Platforms}" > 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
       <Border BorderBrush="Black" BorderThickness="1"> 
        <ItemsControl ItemsSource="{Binding Units}"> 
          <ItemsControl.ItemTemplate> 
           <DataTemplate> 
            <Border BorderBrush="Green" BorderThickness="1"> 
             <ItemsControl ItemsSource="{Binding Units}"> 
              <ItemsControl.ItemsPanel> 
              <ItemsPanelTemplate> 
               <StackPanel Orientation="Horizontal"></StackPanel> 
              </ItemsPanelTemplate> 
             </ItemsControl.ItemsPanel> 
              <ItemsControl.ItemTemplate> 
               <DataTemplate> 
                <Border BorderBrush="Yellow" BorderThickness="1"></Border> 
               </DataTemplate> 
              </ItemsControl.ItemTemplate> 
             </ItemsControl> 
            </Border> 
            </DataTemplate> 
           </ItemsControl.ItemTemplate> 
          </ItemsControl> 
         </Border> 
         </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
+0

首先:請原諒我在這裏遲到!第二:很棒!在C&P之後馬上工作! – 2013-04-30 17:54:47

+0

@MareInfinitus樂於幫助。也許回答的綠色複選標記是:) – jure 2013-04-30 17:58:25

+0

可能必須將最內層的ItemsControl更改爲水平的堆棧面板,但應該不是一個大問題。非常感謝!很高興我可以給予「綠色檢查」;) – 2013-04-30 17:59:23

1

我不知道,如果每一個元素都是可選的,或者如果他們的大小均勻的水平,但如果是這樣,你應該能夠嵌套ItemsControl來建模。

設置ItemsPanelRows="1"一個UniformGridUnitItemsControl,其他ItemsControl的垂直StackPanel S的默認ItemsPanel應該罰款。

+0

非常感謝!這對內部itemscontrols可以是非常有用的! – 2013-04-30 18:00:32

+0

已使用UniformGrid,它看起來完全像我想要的。有沒有一種方法可以將其虛擬化?在這個視圖中我有很多UIElements,我感覺很慢(即使在我的機器上加載時間超過1秒)。認爲現在大約有5000個元素(計算文本框,網格,itemscontrols和那個) – 2013-05-01 20:59:01