2017-03-31 11 views
1

私は約25フィールドのフォームといくつかのドロップダウンも持っています。すべてのフォームをリセットするクリーンボタンが必要です。これを行う簡単な方法はありますか?Xamarinフォームのすべてのフィールドをクリアします。

+0

これはただの思考ではなく、それが動作するかしない場合、すべての入力ボックスのためにあなたが例のエントリ1の文字列の配列にバインドすることができることを確認しては、文字列にバインドされた文字列に[1]、エントリ2である[2 ] 等々。クリアボタンでは、すべての入力ボックスを並べ替えるべき配列をクリアすることができます。私は簡単なドロップダウン方法についてはわかりません。 –

答えて

2

コントロールが双方向バインディングでオブジェクトにバインドされている場合は、プロパティを反復処理して下のコードを使用して値をクリアできます。

private async void btnClear_Clicked(object sender, EventArgs e) 
    { 
     MyData data = (MyData)this.BindingContext; 
     await ClearProperties(data); 
    } 

    private async Task ClearProperties<T>(T instance) 
    { 
     await ClearProperties(typeof(T), instance); 
    } 

    private async Task ClearProperties(Type classType, object instance) 
    { 
     foreach (PropertyInfo property in classType.GetRuntimeProperties()) 
     { 
      object value = null; 
      try 
      { 
       value = property.GetValue(instance, null); 
      } 
      catch (Exception) 
      { 
       //Debug.WriteLine(ex.Message); 
      } 
      if (value != null && property.PropertyType != typeof(String)) 
       await ClearProperties(property.PropertyType, value); 
      else if (value != null && (String)value != "") 
       property.SetValue(instance, null); 
     } 
    } 

これはプロパティとそのプロパティをループし、文字列であり空でない場合は値をnullに設定します。 String以外のものにバインドする場合は、少し修正する必要があります。

2

たとえば、私は同じ状況ですが、すべてのエントリとドロップダウンはBindingContextを通じてモデルによって結ばれています。

フォームを消去するときは、モデルを再度インスタンス化してBindingContextにバインドするだけです。

private void ClearForm_OnClicked(object sender, EventArgs e) 
    { 
     BindingContext = new ViewModel(); 
     _viewModel = (ViewModel)BindingContext; 
    } 
関連する問題