gpt4 book ai didi

c# - Xamarin 形式 - MVVM 可观察集合始终为空

转载 作者:行者123 更新时间:2023-12-03 10:32:31 26 4
gpt4 key购买 nike

我对可观察的集合有一个最奇怪的问题。我用一些虚拟数据设置了我的集合,它按预期加载到内容页面上,但是当我尝试从数据上下文中获取数据时,它始终为空。

我在 ViewModel 中调试了代码,我可以看到集合为空。它显然不是空的,因为我填充了表单。

我这里有什么遗漏吗!

private ObservableCollection<Company> _CompanyCollection;
public ObservableCollection<Company> CompanyCollection
{
get { return _CompanyCollection; }
set
{
if (value != null)
{
_CompanyCollection = value;
OnPropertyChanged();
}
}
}

加载数据中
public void LoadTestCompanies()
{
CompanyCollection = new ObservableCollection<Company>()
{
new Company() { Name="The Suit Lounge"},
new Company() { Name="The Suit Lounge"},
new Company() { Name="The Suit Lounge"}
};
}

从 page.cs 中的事件调用 Viewmodel
CompaniesVM viewModel = (CompaniesVM)BindingContext;
var results = viewModel.CompanyCollection.Where(x => x.Name.ToLower().Contains(searchBar.Text.ToLower()));

这是后面的代码
public Companies ()
{
InitializeComponent ();
BindingContext = new CompaniesVM(this.Navigation);
}

ViewModel 调用 loatTestCompanies
   public CompaniesVM(INavigation navigation)
{

// Navigation
Navigation = navigation;

LoadTestCompanies();

}

我尝试了许多其他方法来初始化集合并使用 .Add(object> 但似乎没有任何效果。

任何想法都会很棒。

谢谢

最佳答案

两个建议可以解决您的问题:

1

引用集合时使用自我声明的只读属性:

public ObservableCollection<Company> CompanyCollection { get; }

2

此更改将强制您创建 CompanyCollection 的实例直接在构造函数中:
public CompaniesVM(INavigation navigation)
{
Navigation = navigation;
CompanyCollection = new ObservableCollection<Company>();
LoadTestCompanies();
}

进而...:
public void LoadTestCompanies()
{
CompanyCollection.AddRange(new[]
{
new Company() { Name="The Suit Lounge"},
new Company() { Name="The Suit Lounge"},
new Company() { Name="The Suit Lounge"}
});
}

我相信更改绑定(bind)属性的引用本身意味着 ViewModel使用对象实例和 View使用另一个。因此 View “停止”以监听该属性的 VM 更改。

我从未深入 ItemsSource小号 Views实现,但我猜他们在绑定(bind)集合时会观察项目 - 或者在某些情况下是集合实例的属性 - 在收到更改通知时。

通过这些更改,我想您的代码应该可以正常工作。

希望能帮助到你。

关于c# - Xamarin 形式 - MVVM 可观察集合始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52249281/

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