你好,有受孕问题。我使用专业应用程序来计算一些分数。我用C#/ Xamarin.Forms来做。我想管理收藏夹,以便用户可以在有限的分数列表中更快地找到其收藏夹。
我有4个标签:
因此,我希望用户在收藏夹列表中添加/删除乐谱时,在第一个和第二个标签中对此进行更改。目前我有这个:
public static class FavoritesManager
{
public static ObservableCollection<string> FavoritesList = new ObservableCollection<string>();
// Indexer does not work because static class ==> this is one of the problems
// public bool this[string key] { get => this.Favs.Contains(key); }
}
// My ViewModel
public class ScoreListViewModel : ViewModelBase
{
// Each Category is a List<Score>. Score has 3 properties : string Title, string Detail, bool IsFavorite
public ObservableCollection<Category> Categories { get; set; }
public ScoreListViewModel()
{
this.InitializeCategories();
FavoritesManager.FavoritesList.CollectionChanged += OnFavoritesChanged;
}
// When favorites list has changed ==> event CollectionChanged
public void OnFavoritesChanged(object sender, NotifyCollectionChangedEventArgs e)
{
this.InitializeCategories();
}
public void InitializeCategories()
{
this.Categories = new ObservableCollection<Category>
{
new Category ("Cat1")
{
new Score("Foo", "Bar", FavoritesManager.FavoritesList.Contains("Foo"))
}
};
}
// Command used to add a favorite
public ICommand AddToFavorites => new Command<string>((fav) =>
{
FavoritesManager.FavoritesList.Add(fav);
});
}
所以我有2个问题:
如何避免将ViewModel依赖于静态类favoriteManager?我是否真的需要一个静态类,还是有另一种方法可以通过不同的视图实时“共享”它?因为如果我决定更改收藏夹管理,那么当列表中有30-40的分数时,这将非常困难...
是否有一种方法可以避免在我仅更改1项(1个收藏夹)时完全重新初始化类别列表?我认为,这主要是一个XAML /绑定问题...
感谢您的帮助,半乳糖
class不必是静态的。就像在常规(非静态)类上一样,只需具有一个静态实例。也就是说,从类行中删除static
,但将其保留在列表中。
详细信息:
public class FavoritesManager
{
// The only instance.
public readonly static It => new FavoritesManager();
public readonly ObservableCollection<string> FavoritesList = new ObservableCollection<string>();
private FavoritesManager()
{
}
...
}