【问题标题】:How to bind views to a Dictionary in Xamarin.Forms?如何将视图绑定到 Xamarin.Forms 中的字典?
【发布时间】: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


【解决方案1】:

您需要使用ObservableDictionary 并观看事件以防更新、添加或删除。

【讨论】:

    猜你喜欢
    • 2016-08-31
    • 2014-01-11
    • 2020-07-20
    • 2018-09-14
    • 2015-03-19
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多