2016-10-07 12 views

答えて

0

ObservableCollection<YourType>を追加して、コレクションからコマンドdelete要素を追加できます。

var collection = new ObservableCollection<YourType>(); 

yourList.ItemSource = collection; 

// in Command 
public void OnDelete (object sender, EventArgs e) 
{ 
    // getting reference on menu item 
    var menuItem = ((MenuItem)sender).CommandParameter;  
    // cast to underlying viewModel 
    var yourObject = (YourType)menuItem; 
    collection.Remove(yourObject); 
} 
+0

これはMVVMパターンと互換性がありますか? –

0

はい、MVVMパターンと互換性があります。したがって、ListViewにCellがあり、これはviewModelの単一の表現です。そしてそれを使うことは、次の関係を持つアプローチです: "model - viewModel - view"。 ObservableCollectionには、ListViewのセルに表示するViewModelの参照があり、これで、必要なセルを簡単に削除できます。上のコードの改善を参照してください

+0

あなたの答えをありがとう。しかし、これをCommandのModel Viewでどのように使うのですか? –

1

したがって、ビューモデルはプレゼンテーションレイヤーのためだけで、ビューモデルの代わりにセルと対話する必要があります。次の手順に従います。

1.セルのViewModelsオブザーバブルコレクションを作成します。 2.このコレクションをListViewのItemSourceに追加します。 3.次に、コマンドのコードに続いてコールバックメソッド

    <ListView x:Name="citiesListView" ItemTapped="OnSelection"> 
        <ListView.ItemTemplate> 
          <DataTemplate> 
         <ViewCell> 
          <ViewCell.ContextActions> 
           <MenuItem Clicked="DeleteAction" Text="Delete" IsDestructive="true" CommandParameter="{Binding .}" /> 
          </ViewCell.ContextActions> 
          <StackLayout Padding="15,0"> 
            <Label 
            Text="{Binding .}" 
            FontSize="30" 
            VerticalTextAlignment="Center" 
            HorizontalTextAlignment="Center"/> 
          </StackLayout> 
         </ViewCell> 
        </DataTemplate> 
       </ListView.ItemTemplate> 

を追加:

public partial class YourPage : ContentPage 
{ 
    public ObservableCollection<string> YourCollection { get; set; } 

    public YourPage() 
    { 
     InitializeComponent(); 
     // initialize at this point 
     YourCollection = new ObservaleCollection(<Some collection of view models>); 
     citiesListView.ItemsSource = YourCollection; 

    } 


    private void DeleteAction(object sender, System.EventArgs e) 
    { 
     var menuItem = ((MenuItem)sender); 
     var yourViewModel = (YourViewModelType) menuItem.CommandParameter; 

     YourCollection.Remove(yourViewModel); 
    } 
関連する問題