1

私は現在、mvvmライトフレームワークを使用してメトロスタイルアプリを開発しています。

DeleteSelectedAppUserCommandなどのコマンドがあります。ユーザーは、本当にユーザーを削除したいことを確認する必要があります。そこで、静的クラス「DialogService」に静的メソッド「ShowMessageBoxYesNo」を記述しました。

public static async Task<bool> ShowMessageBoxYesNo(string message, string title)
{
    MessageDialog dlg = new MessageDialog(message, title);

    // Add commands and set their command ids
    dlg.Commands.Add(new UICommand("Yes", null, 0));
    dlg.Commands.Add(new UICommand("No", null, 1));

    // Set the command that will be invoked by default
    dlg.DefaultCommandIndex = 1;

    // Show the message dialog and get the event that was invoked via the async operator
    IUICommand result = await dlg.ShowAsync();

    return (int)result.Id == 0;
}

コマンドでこのメソッドを呼び出したいのですが、方法がわかりません...これは不可能ですか?次のコードは機能しません!

#region DeleteSelectedAppUserCommand

/// <summary>
/// The <see cref="DeleteSelectedAppUserCommand" /> RelayCommand's name.
/// </summary>
private RelayCommand _deleteSelectedAppUserCommand;

/// <summary>
/// Gets the DeleteSelectedAppUserCommand RelayCommand.
/// </summary>
public RelayCommand DeleteSelectedAppUserCommand
{
    get
    {
        return _deleteSelectedAppUserCommand
            ?? (_deleteSelectedAppUserCommand = new RelayCommand(
            () =>
            {
                if (await DialogService.ShowMessageBoxYesNo("Do you really want delete the user?","Confirm delete")
                {
                    AppUsers.Remove(SelectedEditAppUser);
                }
            },
            () =>
                this.SelectedEditAppUser != null
            ));
    }
}
#endregion

手伝ってくれてありがとう!マイケル

4

1 に答える 1

1

ラムダで使用する場合awaitは、そのラムダを次のようにマークする必要がありますasync

new RelayCommand(
    async () =>
    {
        if (await DialogService.ShowMessageBoxYesNo("Do you really want delete the user?", "Confirm delete")
        {
            AppUsers.Remove(SelectedEditAppUser);
        }
    },
    () =>
        this.SelectedEditAppUser != null
    )

これにより、通常は回避する必要のあるvoid-returningasyncメソッドが作成されます。ただし、基本的にイベントハンドラーを実装しているので、ここでは意味があると思います。voidまた、イベントハンドラーは、 -returningasyncメソッドが通常使用される唯一の場所です。

于 2012-06-07T09:59:54.760 に答える