2015-10-22 40 views
1

是否有可能在ListView中製作ListView,如果是,是甚至可以在兩者中綁定數據?我已經嘗試過,但它不會工作第一個列表顯示爲我想但第二個不顯示。ListView中的XAML ListView

代碼看起來有點像這樣:

<ListView ItemSource="{Binding Item}" x:Name="ListA"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <TextBlock Text="{Binding Day}"/> 
       <ListView x:Name="ListB" ItemSoruce="{Binding Item}"> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Time}"/> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

C#

listA.ItemsSource = timebooking.TimeBookingDataPeriod.TimeBookingData; 

希望sombody可以幫我:)

+0

現在它應該更容易理解 – blueeyes

回答

1

首先,您應該去一個結合ItemSource={Binding Item}或作爲一個在代碼listA.ItemsSource = ...設置的ItemSource覆蓋等。所以我會忽略這樣一個事實,即你試圖在代碼中設置它並使用綁定(這意味着你的視圖上有一個datacontext)。

<ListView ItemSource="{Binding WeekDays}" x:Name="ListA"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <TextBlock Text="{Binding Day}"/> 
       <ListView x:Name="ListB" ItemSource="{Binding TimesOfDay}"> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Time}"/> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

我已經改變了你的第一個的ItemSource平日和第二的ItemSource到TimesOfDay的清晰度。這解釋了綁定和數據上下文如何工作的方式。

  • 外部ListView(ListA)從外部項繼承它的DataContext,很可能是您的頁面/用戶控件。
  • 在您的ListViewItem中,datacontext被更改爲WeekDays集合中的單個項目。 =>此樹下綁定的每個屬性必須位於WeekDay對象中。
  • 內部ListView(ListB)從ListViewItem繼承它的DataContext。
  • 在ListViewItem中,DataContext更改爲TimesOfDay集合中的單個項目。

每個ListView都是一個新的對象級別。因此,爲了使我的示例能夠正常工作,您需要遵循類結構,而不是簡化代碼並僅使用屬性(而您應該正確實現用於UI更新的INotifyPropertyChanged)。

public class SampleViewModel : INotifyPropertyChanged 
{ 
    public ObservableCollection<WeekDay> WeekDays { get; set; } // first listview 
} 

public class WeekDay 
{ 
    public string Day { get; set; } 
    public ObservableCollection<TimeOfDay> TimesOfDay { get; set; } // second listview 
} 

public class TimeOfDay 
{ 
    public string Time { get; set; } 
} 

如果你想使用頁面的viewmodel中的2個屬性,你必須在ListB中使用一個元素綁定。但是,這隻適用於內部列表視圖中的項目與外部列表視圖中的項目不相關的情況。

{Binding ElementName=ListA, Path=DataContext.ItemsForB} 
+0

我很抱歉Sergiu Cojocaru,但你的答案是更多我想要的,併爲我的錯誤感到遺憾^^ – blueeyes

0
  1. 的ItemsSource沒有的ItemSource
  2. 這裏是一個例子:

    public class ClassB 
        { 
         public string Name { get; set; } 
         public ObservableCollection<ClassA>classAList { get; set; } 
    
         /// <summary> 
         /// Initializes a new instance of the <see cref="ClassB"/> class. 
         /// </summary> 
         public ClassB() 
         { 
          Name = String.Empty; 
          classAList = new ObservableCollection<ClassA>(); 
    
         } 
        } 
    

    公共類ClassA的 { 公共字符串名字{獲得;組; } }

創建列表:

ObservableCollection<ClassB> list = new ObservableCollection<ClassB>(); 

初始化列表:

ClassB item1 = new ClassB() { Name = "listAItem1" }; 
      item1.classAList.Add(new ClassA { Caption = "listBItem1" }); 
      item1.classAList.Add(new ClassA { Caption = "listBItem2" }); 
      item1.classAList.Add(new ClassA { Caption = "listBItem3" }); 
      item1.classAList.Add(new ClassA { Caption = "listBItem4" }); 
      item1.classAList.Add(new ClassA { Caption = "listBItem5" }); 

      list.Add(item1); 


      ClassB item2 = new ClassB() { Name = "listAItem1" }; 
      item2.classAList.Add(new ClassA { Caption = "listBItem1" }); 
      item2.classAList.Add(new ClassA { Caption = "listBItem2" }); 
      item2.classAList.Add(new ClassA { Caption = "listBItem3" }); 
      item2.classAList.Add(new ClassA { Caption = "listBItem4" }); 
      item2.classAList.Add(new ClassA { Caption = "listBItem5" }); 

      list.Add(item1); 

      this.DataContext = list; 

和XAML:

<ListView ItemsSource="{Binding}" x:Name="ListA"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <TextBlock Text="Day"/> 
         <ListView x:Name="ListB" ItemsSource="{Binding classAList}"> 
          <ListView.ItemTemplate> 
           <DataTemplate> 
            <TextBlock Text="{Binding Caption}"/> 
           </DataTemplate> 
          </ListView.ItemTemplate> 
         </ListView> 
        </Grid> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
  • 它似乎你想創建一個分組的列表,在這種情況下,最好使用GridView控件與組: 所有的Good step by step tutorial for grouped gridview