2014-12-08 81 views
1
結合

我想叫ItemGroup自定義對象本身包含的ObservableCollectionItem對象(其它性質)的ObservableCollection綁定到LongListSelector(創建Item對象的分組)的WP8 0.1的Silverlight:嵌套集合LLS的ItemsSource與分組

public class Item : INotifyPropertyChanged { 
    private string _name = ""; 
    public string Name { 
     get { 
      return _name; 
     } 
     set { 
      if (value != _name) { 
       _name = value; 
       NotifyPropertyChanged("Name"); 
      } 
     } 
    } 

    private int _cost = 0; 
    public int Cost { 
     get { 
      return _cost; 
     } 
     set { 
      if (value != _cost) { 
       _cost = value; 
       NotifyPropertyChanged("Cost"); 
      } 
     } 
    } 
} 

public class ItemGroup : INotifyPropertyChanged { 
    private string _groupName = ""; 
    public string GroupName { 
     get { 
      return _groupName; 
     } 
     set { 
      if (value != _groupName) { 
       _groupName = value; 
       NotifyPropertyChanged("GroupName"); 
      } 
     } 
    } 

    private int _totalCost = 0; 
    public int TotalCost { 
     get { 
      return _totalCost; 
     } 
     set { 
      if (value != _totalCost) { 
       _totalCost = value; 
       NotifyPropertyChanged("TotalCost"); 
      } 
     } 
    } 

    private ObservableCollection<Item> _items = new ObservableCollection<Item>(); 
    public ObservableCollection<Item> Items { 
     get { 
      return _items; 
     } 
     set { 
      if (value != _items) { 
       _items = value; 
       NotifyPropertyChanged("Items"); 
      } 
     } 
    } 
} 

視圖模型包含屬性:

private ObservableCollection<ItemGroup> _itemGroupList = new ObservableCollection<ItemGroup>(); 
public ObservableCollection<ItemGroup> ItemGroupList { 
    get { 
     return _itemGroupList; 
    } 
    set { 
     if (value != _itemGroupList) { 
      _itemGroupList = value; 
      NotifyPropertyChanged("ItemGroupList"); 
     } 
    } 
} 

而XAML:

<phone:LongListSelector ItemsSource="{Binding ItemGroupList}"> 

    <!-- Template for ItemGroup Items --> 
    <phone:LongListSelector.ItemTemplate> 
     <DataTemplate> 
     <Grid Height="Auto" Margin="12,0,2,15"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 

      <!-- Item Name --> 
      <TextBlock Text="{Binding Items.Name}" Grid.Column="0"/> 

      <!-- Item Cost --> 
      <TextBlock Text="{Binding Items.Cost, StringFormat='{}{0} dollars'}" Grid.Column="1"/> 
     </Grid> 
    </DataTemplate> 
    </phone:LongListSelector.ItemTemplate> 


    <!-- Template for ItemGroup headers --> 
    <phone:LongListSelector.GroupHeaderTemplate> 
     <DataTemplate> 
      <Grid Background="#FFA2A2A2" Margin="0,10"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 

       <!-- ItemGroup Group Name --> 
       <TextBlock Grid.Column="0" Text="{Binding GroupName}"/> 

       <!-- ItemGroup Total Cost --> 
       <TextBlock Grid.Column="1" Text="{Binding TotalCost}"/> 
      </Grid> 
     </DataTemplate> 
    <phone:LongListSelector.GroupHeaderTemplate> 
</phone:LongListSelector> 

哪一個不工作。 ItemGroupGroupNameTotalCost)的直接屬性正確綁定且可見,但沒有顯示Item對象!我懷疑這是因爲我傳遞給ItemTemplate錯誤的來源?我試過在LLS中用ItemSource={Binding ItemGroupList.Items}直接綁定收藏集,但這也行不通。

更新:綁定頭控制到Items.Count產生Item對象的內部的ItemGroupItems實際數量,這表明確實存在Item對象爲每個ItemGroup的列表。

回答

1

請注意,你有一個嵌套集合,所以你需要2個項目控件。您不能綁定到「Items.Name」或「Items.Cost」,因爲它們不是屬性。你可以使用「Items [0] .Name」,但我想你可能想列出所有的項目,像這樣(在「LongListSelector.ItemTemplate」中):

<ItemsControl ItemsSource="{Binding Items}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <!-- Item Name --> 
       <TextBlock Text="{Binding Items.Name}" Grid.Column="0"/> 

       <!-- Item Cost --> 
       <TextBlock Text="{Binding Items.Cost, StringFormat='{}{0} dollars'}" Grid.Column="1"/> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

Thanks!我想我試圖避免嵌套控件,因爲它可能違背了WP的設計準則。這個解決方案雖然工作! – 2014-12-09 00:26:53