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 關注
- 184 瀏覽
添加回答
舉報