c# - ObservableCollections 在 MAUI 中还没有工作?
问题描述
我尝试了 MAUI 和 MVVM 与ObservableCollection
.
- 创建新的 MAUI 项目
- 添加了 ViewModel
BindingContext
- 绑定
StackLayout
到ObservableCollection
- 在按钮单击时将项目添加到集合中
没有什么变化。尽管单击按钮时添加了第三个元素,但“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 更改一些内容吗?
解决方案
我试图重现你所看到的,我 100% 可以。显示初始值,但在添加某些内容时不显示。但是,检查 Live Visual Tree,我们看到Label
s 确实被添加了。作品,ObservableCollection
似乎布局只是没有更新。
即使调用强制布局,StackLayout
它似乎也不会更新,所以看起来布局此时无法正常工作。
看看路线图,还有一些布局工作要做,可能会在预览版 7 中修复。
推荐阅读
- azure - ARM 模板为存储容器类型的数组抛出不正确的段长度
- mysql - MySQL MAX 每天
- android - 忽略来自android webview缓存的文件url
- css - 无法在反应 css 组件中向上移动文本
- model-view-controller - 在每个循环中应用不同的 DIV
- java - JTableCell 中的 JCheckBox 在单击时出现和消失
- c++ - 我如何优化代码?在 leetcode 时间限制超过
- char - 脚本结果首字母大写
- mysql - React + Nodejs + mySQl 中的 400 Bad Request Cloudinary Upload Error
- javascript - React Redux applyMiddleware 参数数量无效