当我加载 JSON 文件时,Listview 不会每次都更新
Listview will not update everytime when i'm loading JSON file
我正在使用 MVVM 模式制作一个 Windows 商店应用程序。当我从 JSON 文件加载我的字典并将其绑定到列表视图时,它不会在我每次切换视图时更新。有时列表视图正在更新,有时不是。对出了什么问题的一些建议?
class昆德坚持
public static async Task<List<Kunde>> LoadKunderFromJsonAsync()
{
string kundeJsonString = await DeserializekunderFileAsync(JsonFileKunder);
if (kundeJsonString != null)
return (List<Kunde>)JsonConvert.DeserializeObject(kundeJsonString, typeof(List<Kunde>));
return null;
}
private static async Task<string> DeserializekunderFileAsync(string fileName)
{
try
{
StorageFile localFile = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
return await FileIO.ReadTextAsync(localFile);
}
catch (FileNotFoundException)
{
return null;
}
}
Class 预订系统 (ViewModel)
private async void LoadKunder()
{
_id = 1;
var loadedKunder = await KundePersistency.LoadKunderFromJsonAsync();
if (loadedKunder != null)
{
KundeRegister.KundeMedId.Clear();
foreach (var kunde in loadedKunder)
{
KundeRegister.KundeMedId.Add(_id++, kunde);
}
}
}
Class KundeRegister(型号)
public class KundeRegister : INotifyPropertyChanged
{
public Dictionary<int, Kunde> KundeMedId { get; set; }
public KundeRegister()
{
KundeMedId = new Dictionary<int, Kunde>();
KundeMedId.Add(Kunde.Id,new Kunde("bob","bob","bob","bobbobbo","bob","bob"));
KundeMedId.Add(Kunde.Id, new Kunde("bob", "bob", "bob", "bobbobbo", "bob", "bob"));
}
public void AddKunde(string username, string password,string adresse,string email, string name, string tlf)
{
KundeMedId.Add(Kunde.Id, new Kunde(adresse, email, name, tlf, username, password));
OnPropertyChanged();
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
您需要为您的用户 ObeservableCollection,因为 Dictionary 没有默认实现 INotifyPropertyChanged
private ObservableCollection<NavigationItem> _loadedKunder ;
public ObservableCollection<NavigationItem> loadedKunder
{
get { return _loadedKunder ; }
set
{
if (value != _loadedKunder )
{
_loadedKunder = value;
NotifyPropertyChanged("loadedKunder");
}
}
}
我正在使用 MVVM 模式制作一个 Windows 商店应用程序。当我从 JSON 文件加载我的字典并将其绑定到列表视图时,它不会在我每次切换视图时更新。有时列表视图正在更新,有时不是。对出了什么问题的一些建议?
class昆德坚持
public static async Task<List<Kunde>> LoadKunderFromJsonAsync()
{
string kundeJsonString = await DeserializekunderFileAsync(JsonFileKunder);
if (kundeJsonString != null)
return (List<Kunde>)JsonConvert.DeserializeObject(kundeJsonString, typeof(List<Kunde>));
return null;
}
private static async Task<string> DeserializekunderFileAsync(string fileName)
{
try
{
StorageFile localFile = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
return await FileIO.ReadTextAsync(localFile);
}
catch (FileNotFoundException)
{
return null;
}
}
Class 预订系统 (ViewModel)
private async void LoadKunder()
{
_id = 1;
var loadedKunder = await KundePersistency.LoadKunderFromJsonAsync();
if (loadedKunder != null)
{
KundeRegister.KundeMedId.Clear();
foreach (var kunde in loadedKunder)
{
KundeRegister.KundeMedId.Add(_id++, kunde);
}
}
}
Class KundeRegister(型号)
public class KundeRegister : INotifyPropertyChanged
{
public Dictionary<int, Kunde> KundeMedId { get; set; }
public KundeRegister()
{
KundeMedId = new Dictionary<int, Kunde>();
KundeMedId.Add(Kunde.Id,new Kunde("bob","bob","bob","bobbobbo","bob","bob"));
KundeMedId.Add(Kunde.Id, new Kunde("bob", "bob", "bob", "bobbobbo", "bob", "bob"));
}
public void AddKunde(string username, string password,string adresse,string email, string name, string tlf)
{
KundeMedId.Add(Kunde.Id, new Kunde(adresse, email, name, tlf, username, password));
OnPropertyChanged();
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
您需要为您的用户 ObeservableCollection,因为 Dictionary 没有默认实现 INotifyPropertyChanged
private ObservableCollection<NavigationItem> _loadedKunder ;
public ObservableCollection<NavigationItem> loadedKunder
{
get { return _loadedKunder ; }
set
{
if (value != _loadedKunder )
{
_loadedKunder = value;
NotifyPropertyChanged("loadedKunder");
}
}
}