2017-03-31 54 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); 
     } 
    } 

这循环遍历属性及其属性,如果它是一个字符串,它不是空的,它将设置为空值。如果你绑定到一个字符串以外的东西,你可能需要修改一下。

2

例如,我有相同的情况,但所有条目和下拉列表都通过BindingContext与模型绑定。

清除表单时,唯一需要的是再次实例化模型并将其绑定到BindingContext。

private void ClearForm_OnClicked(object sender, EventArgs e) 
    { 
     BindingContext = new ViewModel(); 
     _viewModel = (ViewModel)BindingContext; 
    }