3 回答
TA贡献1806条经验 获得超5个赞
根据您的描述和代码,您首先使用MVVM绑定ListView,工作正常,现在您想使用Viewmodel直接在xaml.cs中绑定ListView itemsource,对吗?
如果是的话,我按照你的代码做了一个示例,你看一下,数据可以成功显示。
public partial class Page4 : ContentPage
{
public APIViewModel LocalAPIViewModel { get; set; }
public Page4 ()
{
InitializeComponent ();
LocalAPIViewModel = new APIViewModel();
listview1.ItemsSource = LocalAPIViewModel.ContactsList;
}
}
public class APIViewModel
{
public ObservableCollection<MainContacts> ContactsList { get; set; }
public APIViewModel()
{
loadddata();
}
public void loadddata()
{
ContactsList = new ObservableCollection<MainContacts>();
for(int i=0;i<20;i++)
{
MainContacts p = new MainContacts();
p.ID = i;
p.FirstName = "cherry"+i;
ContactsList.Add(p);
}
}
}
public class MainContacts
{
public int ID { get; set; }
public string FirstName { get; set; }
}
所以我建议你可以检查ContactsList是否有数据。
TA贡献1786条经验 获得超11个赞
所以,回答你所有的问题......
首先,绑定。
一旦你设置了,这意味着任何时候你通过调用来ItemsSource="{Binding ContactsList}"
表明你已经改变了,这将反映在属性上(所以,更新 UI - 这就是我们将 放入setter 的原因)。因此,您无需每次更改时都手动设置。(特别是来自视图,因为视图不应该知道 ContactsList 在 ViewModel 中是如何定义的。)ContactsList
OnPropertyChanged()
ItemsSource
OnPropertyChanged()
ItemsSource
因此,您可以从视图的代码隐藏中完全删除这些行。
接下来,排序和搜索。
它的作用OnPropertyChanged()
是从 ViewModel 重新请求绑定属性,并根据该属性更新 View。因此,在调用之后, View 就会调用OnPropertyChanged()
绑定属性 ( ) 的 getter 。ContactsList
因此,一个好主意是将排序机制放入公共属性的 getter 中。(或者设置器,当重置属性时。)像这样:
public class ViewModel {
private ObserveableCollection<MainContacts> contactList { get; set; }
public ObserveableCollection<MainContacts> ContactList {
get {
return new ObservableCollection<MainContacts>(contactList
.Where(yourFilteringFunc)
.OrderBy(yourOrderingFunc));
}
set {
contactsList = value;
OnPropertyChanged();
}
}
//...
}
因此,每当调用您的公共财产时,它都会对私有财产进行排序并以这种方式返回集合。
TA贡献1853条经验 获得超6个赞
更改public List<MainContacts> ContactsList
为public ObservableCollection<MainContacts> ContactsList
在xaml.cs中
而不是LocalList = LocalAPIViewModel.ContactsList;
, 把
ContactsList = new ObservableCollection(LocalAPIViewModel.ContactsList);
我认为这会起作用,而不是将 ListView 的 Itemsource 设置为“LocalList”
- 3 回答
- 0 关注
- 127 浏览
添加回答
举报