私のViewModelでdelete objectコマンドを使用しています。コマンドはボタンにバインドされています。ここまでは順調ですね。ボタンをクリックすると、オブジェクトはdbから削除されます。さて、明らかに、これを検証する必要があるので、私はDisplayAlertを使って "あなたは本当に削除しますか?"ユーザに提供する。これは表示されますが、アイテムはボタンのクリックに関係なく削除されます。ユーザーが「はい」を選択した場合、ViewModelでコマンドを実行するしか方法を理解するのには苦労しています。Xamarinでdisplayalert検証後にViewModelコマンドを実行する方法
XAMLボタン:
<Button Text="Delete player" Command="{Binding DeleteCommand}" Clicked="DeletePlayerEvent"></Button>
Clickedイベント:
private async void DeletePlayerEvent(object sender, EventArgs e)
{
bool answer = await DisplayAlert("Notification", "Are you sure you want to delete this player?", "Yes", "No");
//if (answer == true)??????
// {
//Can I run the command from here?
//}
}
ViewModelにコマンド
public Command DeleteCommand
{
get
{
return new Command(async() =>
{
var playerServices = new PlayerServices();
await playerServices.DeletePlayerAsync(_Player.Id);
});
}
}
これは簡単な修正ですが、適切なMVVMの恩恵を受けるわけではありません。ビューモデルはビューのロジックを保持すると考えられ、ビューはプレゼンテーションのみにする必要があります。ダイアログが複数のビューモデルのプロパティに基づいて表示される必要がある場合、またはコマンドの実行が失敗した後(たとえば、もう一度やり直すなど)、想像してみてください。ビューロジックの半分がビューに表示され、単体テストできません。 – bryanbcook
@bryanbcook - MVVMに多くのストレスを与えないでください。 Xamarinでは、ビューのコードの中でいくつかのことをやるべきです。それは犯罪ではありません。これは議論の余地のあるトピックであり、私はそれを避けるために戻っていくだろう。私はそれに立つつもりはありません。最もよく知られているXamarinの開発者(James)もそうしています。あなたは、Xamarin Evolve 2016で展示されているhttps://github.com/xamarinhq/app-evolveで同じものを探すことができます。間違っていると思われる場合は、そのレポのバグを開いて私にリンクを送ってくださいチャイムイン。私は詳細に話すことがうれしいです。 – Jsinh
そして@bryanbcook - あなたは「クイック」修正よりもうまくいくようにするための提案/別の提案がありますか? – Jsinh