第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Xamarin 中將 listview itemssource 設置為 viewmodel?

如何在 Xamarin 中將 listview itemssource 設置為 viewmodel?

C#
嚕嚕噠 2023-08-20 14:53:37
我正在嘗試在 xamarin 中創(chuàng)建一個列表視圖,顯示來自restapi的數據,但可以選擇過濾列表或根據姓氏對其進行排序。我已將綁定上下文設置為等于有效的 apiviewmodel 。但我想將 itemssource 設置為一個可以稍后操作的列表,而不是綁定上下文。這是有效的代碼:XML:<ListView x:Name="DirectoryListView" ItemsSource="{Binding ContactsList}" IsPullToRefreshEnabled="True">Xaml.cs:LocalAPIViewModel = new APIViewModel();BindingContext = LocalAPIViewModel;APIViewModel.cs:private List<MainContacts> _ContactsList { get; set; }public List<MainContacts> ContactsList    {        get        {            return _ContactsList;        }        set        {            if(value != _ContactsList)            {                _ContactsList = value;                NotifyPropertyChanged();            }        }    }public class MainContacts{    public int ID { get; set; }    public string FirstName { get; set; }}這一切都很好。只有當我添加以下行時,它才會停止在列表視圖中顯示數據:xaml.cs:LocalList = LocalAPIViewModel.ContactsList;DirectoryListView.ItemsSource = LocalList;我想我需要添加這些行,以便我可以操作正在顯示的列表。為什么不顯示列表?難道這不是應該做的嗎?
查看完整描述

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是否有數據。

查看完整回答
反對 回復 2023-08-20
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

所以,回答你所有的問題......


首先,綁定。

一旦你設置了,這意味著任何時候你通過調用來ItemsSource="{Binding ContactsList}"表明你已經改變了,這將反映在屬性上(所以,更新 UI - 這就是我們將 放入setter 的原因)。因此,您無需每次更改時都手動設置。(特別是來自視圖,因為視圖不應該知道 ContactsList 在 ViewModel 中是如何定義的。)ContactsListOnPropertyChanged()ItemsSourceOnPropertyChanged()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();

        }

    }

    //...

}

因此,每當調用您的公共財產時,它都會對私有財產進行排序并以這種方式返回集合。


查看完整回答
反對 回復 2023-08-20
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

更改public List<MainContacts> ContactsListpublic ObservableCollection<MainContacts> ContactsList

xaml.cs中

而不是LocalList = LocalAPIViewModel.ContactsList;, 把

ContactsList = new ObservableCollection(LocalAPIViewModel.ContactsList);

我認為這會起作用,而不是將 ListView 的 Itemsource 設置為“LocalList”


查看完整回答
反對 回復 2023-08-20
  • 3 回答
  • 0 關注
  • 184 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號