2014-03-04 60 views
0

我已經成功地將一個項目添加到MVVM列表中,現在我的問題是維護視圖模型中的列表。每當我導航到一個頁面或返回到一個頁面並返回到該列表視圖時,列表就會重置。我將如何能夠實現這一目標?我目前正在使用棱鏡來構建MVVM。在List/ObservableCollection中維護集合

視圖模型:

public ObservableCollection<CartData> _cartData; 

public ObservableCollection<CartData> CartData 
     { 

     get { 
      return _cartData; 
      } 
     set { 

       SetProperty(ref _cartData, value); 
      } 
     } 




     private DelegateCommand _addItemCommand; 
     public ICommand AddItemCommand 
     { 
      get 
      { 
       if (_addItemCommand == null) 
       { 
        _addItemCommand = new DelegateCommand(AddToCart); 
       } 
       return _addItemCommand; 
      } 
     } 

     public void AddToCart() { 

      CartData.Add(new CartData { Cakename = "Black Forest", Cakeprice = 104 }); 
        } 

查看:

..... 

<Page.DataContext> 
     <vm:CartingDataSource/> 
    </Page.DataContext> 
    .... 
<ListView 
      x:Name="itemListView" 
      AutomationProperties.AutomationId="ItemsListView" 
      AutomationProperties.Name="Items" 
      TabIndex="1" 
      Margin="-10,130,0,264" 
      Padding="120,0,0,60" 

      ItemsSource="{Binding cartData}" 
      IsSwipeEnabled="False" Grid.RowSpan="2" ItemClick="itemListView_ItemClick" SelectionChanged="itemListView_SelectionChanged_1" IsItemClickEnabled="True"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <Grid Margin="6"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"/> 
          <ColumnDefinition Width="*"/> 
         </Grid.ColumnDefinitions> 
         <Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="60" Height="60"> 
          <Image Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}" Source="Assets/wewewew.jpg"/> 
         </Border> 
         <StackPanel Grid.Column="1" Margin="10,0,0,0"> 
          <TextBlock Text="{Binding Cakename}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap" MaxHeight="40"/> 
          <TextBlock Text="{Binding Cakeprice}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap"/> 
         </StackPanel> 
        </Grid> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
      <ListView.ItemContainerStyle> 
       <Style TargetType="FrameworkElement"> 
        <Setter Property="Margin" Value="0,0,0,10"/> 
       </Style> 
      </ListView.ItemContainerStyle> 
     </ListView> 
+0

我相信這個問題是完全一樣的,因爲這等一個也貼:[保持集合在MVVM列表](http://stackoverflow.com/questions/22189517/keep-the-collections-in-the-list-in-mvvm)。正如我在那個討論中評論你的那樣,你似乎將註冊視爲_ **非單實例** _實例。因此,容器不會維護View的引用,並且每次導航時都會創建一個新引用。但是,如果您確實將視圖註冊爲單一視圖,那麼如果您可以顯示如何註冊類型並導航到它們將會很有幫助。問候。 – GOstrowsky

回答

0

這裏,如果您的視圖模型是在它被在每個頁面加載instatiated這種情況下CartingDataSource。現在,如果是這樣的話,那麼你在下面的構造函數創建集合的一個新實例:

public CartingDataSource() { 


     CartData = new ObservableCollection<CartData>(); 

     } 

其結果是它重新初始化您的收藏。

您需要從構造函數中刪除初始化和做這樣的事情:

public ObservableCollection<CartData> _cartData; 

public ObservableCollection<CartData> cartData 
    { 

    get { 
      if(_cartData == null) 
      { 
       _cartData = new ObservableCollection<CartData>(); 
      } 
     return _cartData; 
     } 
    set { 

      _cartData = value; 
     } 
    } 
+0

感謝您的答案,但不起作用,我使用2頁相同的mvvm。 –

+0

CartingDataSource是您的ViewModel嗎? – Mustafa

+0

是的!這是我的視圖模型 –