当我加载 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");
            }
        }
    }