2017-01-02 43 views
0

私のアプリはContentDialogをデータ挿入の手段として使用します。言い換えると;データフォームはContentDialogです。ユーザー入力の検証中、アプリケーションはMessageDialogを使用してユーザーにエラーを表示します。ただし、MessageDialogを終了すると、ContentDialogも終了します。ここでUWP MessageDialogが親ContentDialogを閉じるのを防ぐ

は、警告が表示されたコードの塊です:

private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) 
{ 
    //save item 
    ValidateForm(); 
} 

private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) 
{ 
} 

private async void ValidateForm() 
{ 
    //Ensure all fields are filled 
    String barcode = BarcodeText.Text.Trim(); 
    String desc = DescText.Text.Trim(); 
    String cost = CostText.Text.Trim(); 
    String price = PriceText.Text.Trim(); 
    String stock = StockText.Text.Trim(); 

    if(barcode.Equals(String.Empty) || desc.Equals(String.Empty) || 
      desc.Equals(String.Empty) || cost.Equals(String.Empty) || 
      price.Equals(String.Empty) || stock.Equals(String.Empty)) 
    { 
     var dialog = new MessageDialog("Please fill in all fields"); 
     await dialog.ShowAsync(); 
     return; 
    } 
    //check uniqueness of the barcode 

} 

私は親ContentDialogを閉じてから警告を防ぐために何をすべき?

答えて

2

PrimaryButtonまたはSecondaryButtonをクリックするとContentDialogが自動的に解除されます。この動作を無効にするには、args.Cancelプロパティをtrueに設定する必要があります。 ValidateFormは非同期メソッドなので、Raymond Chenが言ったように延期を取る必要もあります。

のでMessageDialogは示されていたとき、あなたはContentDialogをクローズしたくない場合は、コードは次のように何とかなります

private async void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) 
{ 
    //save item 
    var deferral = args.GetDeferral() 
    args.Cancel = await ValidateForm(); 
    deferral.Complete(); 
} 

private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) 
{ 
} 

// Returns true if the MessageDialog was shown, otherwise false 
private async Task<bool> ValidateForm() 
{ 
    //Ensure all fields are filled 
    String barcode = BarcodeText.Text.Trim(); 
    String desc = DescText.Text.Trim(); 
    String cost = CostText.Text.Trim(); 
    String price = PriceText.Text.Trim(); 
    String stock = StockText.Text.Trim(); 

    if(barcode.Equals(String.Empty) || desc.Equals(String.Empty) || 
      desc.Equals(String.Empty) || cost.Equals(String.Empty) || 
      price.Equals(String.Empty) || stock.Equals(String.Empty)) 
    { 
     var dialog = new MessageDialog("Please fill in all fields"); 
     await dialog.ShowAsync(); 
     return true; 
    } 
    //check uniqueness of the barcode 
    return false; 
} 
+2

をあなたはまた、あなたのため、 'ContentDialogBu​​ttonClickEventArgs'の延期を取る必要があります非同期操作が完了するまで、「キャンセル」を設定しないでください。 –

+1

ありがとう@RaymondChen。サンプルコードに追加しました。 –

関連する問題