1

我尝试了 MAUI 和 MVVM 与ObservableCollection.

  • 创建新的 MAUI 项目
  • 添加了 ViewModelBindingContext
  • 绑定StackLayoutObservableCollection
  • 在按钮单击时将项目添加到集合中

没有什么变化。尽管单击按钮时添加了第三个元素,但“Foo”和“Bar”仍然存在。

我的项目:

将(默认)新项目中的第一个标签替换为

<StackLayout
    Grid.Row="0"
    BindableLayout.ItemsSource="{Binding Foo}">

    <BindableLayout.ItemTemplate>
        <DataTemplate>
            <Label Text="{Binding .}"/>
        </DataTemplate>
    </BindableLayout.ItemTemplate>
                    
</StackLayout>

添加

    <ContentPage.BindingContext>
        <local:MainPageViewModel/>
    </ContentPage.BindingContext>

视图模型:

public class MainPageViewModel
    {
        public ObservableCollection<string> Foo { get; } = new() { "Foo", "Bar" };
    }

在按钮单击中添加(添加为第一个元素以避免由于 UI 高度问题而丢失更改,但是当我尝试 Add() 时没有任何变化):

(this.BindingContext as MainPageViewModel).Foo.Insert(0, "Baz");

如果 ObservableCollections 应该已经可以工作,是否有任何信息?或者(来自 WPF)我必须为 MAUI/Xamarin 更改一些内容吗?

4

1 回答 1

2

我试图重现你所看到的,我 100% 可以。显示初始值,但在添加某些内容时不显示。但是,检查 Live Visual Tree,我们看到Labels 确实被添加了。作品,ObservableCollection似乎布局只是没有更新。

即使调用强制布局,StackLayout它似乎也不会更新,所以看起来布局此时无法正常工作。

看看路线图,还有一些布局工作要做,可能会在预览版 7 中修复。

复制截图

于 2021-07-23T08:30:00.257 回答