【发布时间】:2018-02-14 18:49:04
【问题描述】:
我有 View 和 ViewModel。在 ViewModel 中,我创建了一个动态表单(基于表单对象),这个“动态表单”是一个 StackLayout,有 N 个视图(如条目、选择器...)。
可以说,当用户点击提交按钮时,应用程序需要将表单中的所有字段信息存储在 Dictionary<string, object>() 中。
我有一个方法可以通过 StackLayout 并创建一个新字典。我不太喜欢这样,我想做的是将 Stacklayout 的字段绑定到字典。
我创建一个字段,如下所示:
var entry = new
Keyboard = Keyboard.Numeric,
HorizontalOptions = LayoutOptions.Fill,
VerticalOptions = LayoutOptions.CenterAndExpand
};
然后我:
stackLayout.Children.Add(entry);
为了设置正确的出价,我需要在设置条目属性时使用 BindingContext 属性还是应该使用 setBiding 方法?
我在这里毫无头绪,可以使用一些指针。我在 stackoverflow 上搜索,但没有找到我需要的。
编辑:添加我的 ViewModel 代码。
class FormViewModel : INotifyPropertyChanged
{
public ICommand RegisterCommand { get; set; }
private StackLayout _layout;
private Answer Answer;
private Dictionary<string, object> dictionary = new Dictionary<string, object>();
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public FormViewModel(Form form, StackLayout layout)
{
_layout = layout;
RegisterCommand = new Command(SaveForm);
}
public void SaveForm()
{
}
}
我删除了一些东西,但这是基本的想法。
【问题讨论】:
-
实际上,您将同时设置两者。对于您创建的每个组件,您需要将输入属性(可能还有一个 ValueConverter)设置为字典中相应元素的
object值。 -
嗯,我想知道是否可以 create a class dynamically 并在其中为 StackLayout 的每个视图编写一个属性,然后将这些视图的所需值设置为绑定到这些属性,并在每个绑定的属性,更新你的字典!!!
-
当然,将这些视图的 BindingContext 设置为上述类!
-
@Carlos 你能编辑问题并添加相关的 ViewModel 代码吗?
-
这个答案帮助解决了问题stackoverflow.com/questions/36985634/…
标签: c# xamarin xamarin.forms