フォーム私はXamarinクロスプラットフォームで項目フォームのリストビューを削除するにはどうすればよいMVVM
<ViewCell.ContextActions>
<MenuItem Text="Delete" IsDestructive="True" Command="Binding DleteItemCommand}" />
</ViewCell.ContextActions>
フォームしかし、私は、ユーザーコードがMVVMパターンに準拠します。
フォーム私はXamarinクロスプラットフォームで項目フォームのリストビューを削除するにはどうすればよいMVVM
<ViewCell.ContextActions>
<MenuItem Text="Delete" IsDestructive="True" Command="Binding DleteItemCommand}" />
</ViewCell.ContextActions>
フォームしかし、私は、ユーザーコードがMVVMパターンに準拠します。
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);
}
はい、MVVMパターンと互換性があります。したがって、ListViewにCellがあり、これはviewModelの単一の表現です。そしてそれを使うことは、次の関係を持つアプローチです: "model - viewModel - view"。 ObservableCollectionには、ListViewのセルに表示するViewModelの参照があり、これで、必要なセルを簡単に削除できます。上のコードの改善を参照してください
あなたの答えをありがとう。しかし、これをCommandのModel Viewでどのように使うのですか? –
したがって、ビューモデルはプレゼンテーションレイヤーのためだけで、ビューモデルの代わりにセルと対話する必要があります。次の手順に従います。
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);
}
これはMVVMパターンと互換性がありますか? –