【发布时间】:2020-05-29 06:06:49
【问题描述】:
如果之前有人问过这个问题,请提前道歉。我发现的最接近的东西是 (How to use vertical Scroll view to show binding data),它看起来很有希望,但我不确定它是否会起作用,因为我的理解是模板,正如名称和定义所暗示的那样,必须遵循特定的模式,因此可以不要动态。
我的问题:我正在尝试重写我们的一些代码以更紧密地遵循 MVVM 模式,这当然意味着使视图尽可能地愚蠢。在我看来 (xaml.cs) 我有执行以下操作的代码:
foreach(var tuple in itemsToAdd)
{
var formEntry = formEntries.First(x => x.FormEntryId == tuple.Item1);
var controlType = formatting.GetControlType(formEntry.FormAnswerName,
formEntry.CustomEntryIdentifier);
if (formEntry.Type == 0) {
switch (controlType) {
case CustomControl.Duration:
CustomFields.Children.Add(new DurationView(formEntry.FormEntryId, viewModel));
break;
case CustomControl.TextField:
case CustomControl.InputField:
CustomFields.Children.Add(new InputFieldView(formEntry.FormEntryId, viewModel));
.....//continues like this for different controls.
列表itemsToAdd 是在我的视图模型中定义的,它的工作是找出用户生成的模板中的哪些元素需要显示。这当然很好,因为根据我对 MVVM 的理解,视图模型是需要控制行为(在这种情况下,是要显示的内容),而 UI 只是处理显示字段。
我想知道是否可以让视图模型处理,本质上,设置滚动视图的项目源,就像我们为列表视图创建项目源时所做的那样(比如可用模板),因为每个控件都是我们制作的自定义视图,所以我看不到实现此目的的可行方法,因为它不能(根据我的理解)遵循模板,因为每个控件都是不同的,并且我不想让我的视图模型返回一个实际的视图对象,因为这会违反 MVVM 原则。
真正的本质是:我是否误解了 Xamarin 中的 MVVM,是否可以让后面的 xaml 代码添加我在代码 sn-p 中显示的元素。
抱歉,如果不清楚我的要求是什么!
【问题讨论】:
标签: c# mvvm xamarin.forms