的筆記,重點簡單記就是,ListView 資料來源有變更時,要透過 ObservableCollection 來通知,這樣 ListView 操作時才不會拋出 Exception
Model
namespace ListViewUpdate
{
public class Product
{
public string Name { get; set; }
public override string ToString()
{
return Name;
}
public static List<Product> GetData()
{
return new List<Product>
{
new Product() { Name = "楓葉" } ,
new Product() { Name = "樹" } ,
new Product() { Name = "花" } ,
new Product() { Name = "煙火" } ,
new Product() { Name = "夜景" }
};
}
}
}
ViewModelusing System.ComponentModel;
using System.Windows.Input;
using Xamarin.Forms;
// ObservableCollection 所在的 namespace
using System.Collections.ObjectModel;
namespace ListViewUpdate
{
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
// 引發錯誤版本
public List<Product> Source { get; set; }
public ICommand CmdInsert
{
get
{
return new Command(() => Source.Add(new Product() { Name = "植物" }));
}
}
// 可更新版本
public ObservableCollection<Product> UpdatableSource { get; set; }
public ICommand CmdUpdatableInsert
{
// 上課內容是用 List.Insert 插到第一個順位
get
{
return new Command(() => UpdatableSource.Add(new Product() { Name = "植物" }));
}
}
public ViewModel()
{
// 引發錯誤版本
Source = Product.GetData();
// 可更新版本
ObservableCollection<Product> ProdList = new ObservableCollection<Product>();
foreach (var item in Product.GetData())
{
ProdList.Add(item);
}
UpdatableSource = ProdList;
}
}
}
![[X.Form] ListView](https://farm5.staticflickr.com/4392/36758506235_ceb69f9b00_z.jpg)
![[SQL] Trigger 狀態查詢](https://farm5.staticflickr.com/4367/36628405121_83b503bec4_z.jpg)
![[X.Form] Command - 參數傳遞](https://farm5.staticflickr.com/4388/36713879195_6a8484a714_z.jpg)
![[X.Form] Command - 參數傳遞-2](https://farm5.staticflickr.com/4338/35917837583_4514913c22_z.jpg)



![[X.Form] MVVM 簡易練習](https://farm5.staticflickr.com/4353/36615458085_5e986e3bf6_z.jpg)
![[VSTS] 衝突解決-2](https://farm5.staticflickr.com/4414/36422902632_3459cedb79_z.jpg)
![[VSTS] 衝突解決-3](https://farm5.staticflickr.com/4361/36422902482_5b2a70ca03.jpg)
![[SQL] 複合索引效能-1](https://live.staticflickr.com/65535/52405829968_93f31d6ce2_o.png)
![[SQL] 複合索引效能-2](https://live.staticflickr.com/65535/52405829933_74b0f3dcfd_w.jpg)
![[VSTS] push 現有 repo-2](https://farm5.staticflickr.com/4365/36519001016_b8e015fe8a_z.jpg)
![[VSTS] push 現有 repo-3](https://farm5.staticflickr.com/4418/36168405530_0927a01f4b_z.jpg)
![[VSTS] push 現有 repo-4](https://farm5.staticflickr.com/4442/36168405260_b0944c092c_z.jpg)
![[X.Form] Gorilla Player - 連線問題-1](https://farm5.staticflickr.com/4390/35684343963_cd3f1e8939_z.jpg)
![[X.Form] Gorilla Player - 連線問題-2](https://farm5.staticflickr.com/4414/36492824675_e0c8137744_z.jpg)
![[LINQ] 群組字串連結](https://farm5.staticflickr.com/4386/36431235006_51b86a234c.jpg)
![[Win10] Windows Essentials 2012-1](https://farm5.staticflickr.com/4416/35650038443_38d6234223.jpg)
![[Win10] Windows Essentials 2012-2](https://farm5.staticflickr.com/4405/36289465922_7a06dce048_z.jpg)
![[X.Form] Multi Trigger - 皆須輸入-1](https://farm5.staticflickr.com/4441/35610352374_f7918b86ed_z.jpg)
![[X.Form] Multi Trigger - 皆須輸入-3](https://farm5.staticflickr.com/4374/35610352484_5c1dac7c12_z.jpg)
![[X.Form] Multi Trigger - 皆須輸入-2](https://farm5.staticflickr.com/4339/35610352514_0e0d1c8f49_z.jpg)
![[X.Form] Multi Trigger -1](https://farm5.staticflickr.com/4404/35570287404_6df3f155b6_z.jpg)
![[X.Form] Multi Trigger -2](https://farm5.staticflickr.com/4436/35570287194_714107d1cf_z.jpg)
![[X.Form] Multi Trigger -3](https://farm5.staticflickr.com/4339/35570287564_96581cd177_z.jpg)
![[X.Form] EventTrigger-1](https://farm5.staticflickr.com/4426/36195444592_1ea1473211_z.jpg)
![[X.Form] EventTrigger-2](https://farm5.staticflickr.com/4364/36195444442_dca45c02fa_z.jpg)
![[X.Form] DataTrigger-1](https://farm5.staticflickr.com/4366/36194807332_04c96f2c52_z.jpg)
![[X.Form] DataTrigger-2](https://farm5.staticflickr.com/4342/36226767761_bc2b9707f9_z.jpg)
![[X.Form] Property Trigger-1](https://farm5.staticflickr.com/4419/36194061992_47d369e51b_z.jpg)
![[X.Form] Property Trigger-2](https://farm5.staticflickr.com/4436/35965757710_fe29c711df_z.jpg)
![[X.Form] Property Trigger-3](https://farm5.staticflickr.com/4378/35965757530_ea6732c9df_z.jpg)
![[X.Form] Button-1](https://farm5.staticflickr.com/4374/36289660426_0505d4de92_z.jpg)
![[X.Form] Button-2](https://farm5.staticflickr.com/4412/36197336551_923648e0a2_z.jpg)
![[X.Form] IValueConverter - Entry 必填-1](https://farm5.staticflickr.com/4300/35477449694_1ab38aaf88_z.jpg)
![[X.Form] IValueConverter - Entry 必填-2](https://farm5.staticflickr.com/4310/36313443155_3ea5db1920_z.jpg)
![[X.Form] IValueConverter - Switch 轉換-2](https://farm5.staticflickr.com/4317/36170286821_e4d8aba18b_z.jpg)
![[X.Form] IValueConverter - Switch 轉換-1](https://farm5.staticflickr.com/4315/36170286871_0baf5effe9_z.jpg)
![[X.Form] Switch-1](https://farm5.staticflickr.com/4294/35433677374_b00cf96739_z.jpg)
![[X.Form] Switch-2](https://farm5.staticflickr.com/4308/35433677174_fcae474efe_z.jpg)