gpt4 book ai didi

c# - MVVM 动态添加元素到 ScrollView

转载 作者:行者123 更新时间:2023-12-03 10:15:34 27 4
gpt4 key购买 nike

如果之前有人问过这个问题,请提前道歉。我发现的最接近的东西是 (How to use vertical Scroll view to show binding data),它看起来很有希望,但我不确定它是否会起作用,因为我的理解是模板,正如名称和定义所暗示的那样,必须遵循特定的模式,因此可以不要动态。

我的问题 : 我正在尝试重写我们的一些代码以更紧密地遵循 MVVM 模式,这当然意味着使 View 尽可能地愚蠢。在我看来 (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在我的 View 模型中定义,它的工作是从用户生成的模板中找出需要显示的元素。这当然很好,因为根据我对 MVVM 的理解, View 模型是需要控制行为(在这种情况下,是要显示的内容),而 UI 只是处理显示字段。

我想知道是否可以让 View 模型处理,本质上,设置 ScrollView 的项目源,就像我们为 ListView 创建项目源时所做的那样(比如可用模板列表) ,因为每个控件都是我们制作的自定义 View ,所以我看不到实现此目的的可行方法,因为它不能(根据我的理解)遵循模板,因为每个控件都是不同的,而我没有不想让我的 View 模型返回一个实际的 View 对象,因为这会违反 MVVM 原则。

本质上是:我是否误解了 Xamarin 中的 MVVM,是否可以让后面的 xaml 代码添加我在代码片段中显示的元素。

如果不清楚我的要求,请道歉!

最佳答案

我不确定我是否理解真正的问题,您是否试图为每个 itemsToAdd 显示不同的 UI根据 Type 的元素属性(property)?

如果是问题,可以将整个集合绑定(bind)到 ListView控制(或任何你正在使用的)并使用 DataTemplateSelector选择所需的 UI。 Reference

查看
你可以引用之前的链接。就像:

<ListView ItemsSource="{Binding FormEntries}" DataTemplateSelector="{StaticResource dataTemplateSelectorName}"/>

确保您的页面数据上下文设置为 View 模型

查看型号
假设您的对象类型名为 FormEntry
private ObservableCollection<FormEntry> _formEntries;
public ObservableCollection<FormEntry> FormEntries
{
get => _formEntries;
set
{
_formEntries = value;
// Call the 'RaisePropertyChanged' of the framework you are using
}
}

...
FormEntries = new ObservableCollection<FormEntry>(itemsToAdd);
...

数据模板选择器
请参阅链接以构建扩展 DataTemplateSelector 的类并覆盖 OnSelectTemplate确定业务逻辑的方法来选择你想要的UI模板

关于c# - MVVM 动态添加元素到 ScrollView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60209412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com