電影網(wǎng)站膜拜百度快照投訴中心
Listbox綁定數(shù)據(jù)通過ItemsSource來的,如果綁定的是普通的List<數(shù)據(jù)>,不會(huì)自己刷新。
使用ObservableCollection集合
解決問題的方法:
- 將數(shù)組替換為 ObservableCollection
ObservableCollection 是專為綁定設(shè)計(jì)的集合類型,可以通知 WPF 綁定的集合數(shù)據(jù)發(fā)生變化。
如果本身是List,可以修改為:
using System.Collections.ObjectModel;public ObservableCollection<MyItem> MyItems { get; set; }public MainViewModel()
{MyItems = new ObservableCollection<MyItem>{new MyItem { showsafeui = true, SomeOtherProperty = "Item 1" },new MyItem { showsafeui = false, SomeOtherProperty = "Item 2" },new MyItem { showsafeui = true, SomeOtherProperty = "Item 3" }};
}// 動(dòng)態(tài)添加或刪除數(shù)據(jù)
public void AddNewItem()
{MyItems.Add(new MyItem { showsafeui = true, SomeOtherProperty = "New Item" });
}public void RemoveItem()
{if (MyItems.Any())MyItems.RemoveAt(0);
}
使用 ObservableCollection 后,新增、刪除、或重新排序數(shù)據(jù)時(shí),ListBox 會(huì)自動(dòng)刷新。
數(shù)據(jù)內(nèi)容變化的刷新INotifyPropertyChanged
上面的數(shù)據(jù),如果某個(gè)屬性的內(nèi)容發(fā)生了變化如何刷新??梢允褂肐NotifyPropertyChanged。
public class HeartInfo : INotifyPropertyChanged
{public int id { get; set; }public bool showsafeui{ get; set; }public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged([CallerMemberName] string propertyName = null){Console.WriteLine("刷新UI------------");PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}
}
刷新單個(gè)數(shù)據(jù)
這樣在某個(gè)屬性變化的時(shí)候,可以
public bool showsafeui{get => _showsafeui;set{if (_showsafeui != value){_showsafeui = value;OnPropertyChanged(); // 通知綁定屬性更改}}}
刷新多個(gè)數(shù)據(jù)
如果某個(gè)屬性變化需要刷新多個(gè)
private bool _showsafe;public bool showsafe{get => _showsafe;set{if (_showsafe != value){_showsafe = value;OnPropertyChanged(); // 通知綁定的 showsafe 屬性OnPropertyChanged(nameof(showsafeui)); // 通知綁定的 showsafeui 屬性}}}
簡化刷新所有
我每次都想有一個(gè)屬性變化,刷新所有屬性
可以O(shè)nPropertyChanged(string.Empty)傳入空
private int _updateall = 0;public int updateall {get { return _updateuistat;}set {if (_updateall!= value) { _updateall= 0; OnPropertyChanged(string.Empty); }} //刷新ui
}
這樣我每次屬性變化都調(diào)用updateall = 1,就全部刷新了。