C# Xamarin forms-获取值时MVVM可观察集合始终为0
我有两个可观察的集合,其想法是加载主集合,其中包含来自与表单相关的数据库的所有数据。我将筛选此集合,并使用筛选结果设置Actor集合。我尝试这样做的原因是为了减少将b64图像转换为ImageSource以用于更大集合所需的时间。我只想转换这些图像一次 Onload表单主集合填充了所需的项,但当我单击筛选选项时,主集合始终为0。我可以看到onload 119个条目添加到集合中C# Xamarin forms-获取值时MVVM可观察集合始终为0,c#,xamarin,mvvm,C#,Xamarin,Mvvm,我有两个可观察的集合,其想法是加载主集合,其中包含来自与表单相关的数据库的所有数据。我将筛选此集合,并使用筛选结果设置Actor集合。我尝试这样做的原因是为了减少将b64图像转换为ImageSource以用于更大集合所需的时间。我只想转换这些图像一次 Onload表单主集合填充了所需的项,但当我单击筛选选项时,主集合始终为0。我可以看到onload 119个条目添加到集合中 public ActorCollectionVM(INavigation navigation) {
public ActorCollectionVM(INavigation navigation)
{
Navigation = navigation;
// one time only populate
Device.BeginInvokeOnMainThread(() =>
{
UserDialogs.Instance.ShowLoading("Loading");
Database db = new Database();
List<TMDB_Person> persons = db.GetAllPersons();
ImageUtility util = new ImageUtility();
foreach (TMDB_Person person in persons)
{
person.Profile_Thumb_Image = util.Base64ToImage(person.B64_Profile_Thumb_Image);
MasterCollection.Add(person);
}
ActorCollection = MasterCollection;
UserDialogs.Instance.HideLoading();
});
}
private void LetterSearch_Click(object sender, EventArgs args)
{
ActorCollectionVM context = (ActorCollectionVM)BindingContext;
context.ActorCollection.Clear();
Button btn = (Button)sender;
btn.TextColor = (Color)Application.Current.Resources["ThemeColor"];
if (btn.Text != "ALL")
{
foreach (TMDB_Person person in context.MasterCollection.Where(x => x.Name[0].ToString().ToLower() == btn.Text.ToLower()))
context.ActorCollection.Add(person);
}
else
{
context.ActorCollection = context.MasterCollection;
}
}
公共ActorCollectionVM(活动导航)
{
导航=导航;
//一次性填充
Device.beginInvokeMainThread(()=>
{
UserDialogs.Instance.ShowLoading(“加载”);
数据库db=新数据库();
List persons=db.GetAllPersons();
ImageUtility util=新的ImageUtility();
foreach(TMDB_亲自出席)
{
person.Profile\u Thumb\u Image=util.Base64ToImage(person.B64\u Profile\u Thumb\u Image);
主集合。添加(个人);
}
ActorCollection=主集合;
UserDialogs.Instance.HideLoading();
});
}
私有无效信件搜索\单击(对象发送者、事件args args)
{
ActorCollectionVM上下文=(ActorCollectionVM)BindingContext;
context.ActorCollection.Clear();
按钮btn=(按钮)发送器;
btn.TextColor=(Color)Application.Current.Resources[“ThemeColor”];
如果(btn.Text!=“全部”)
{
foreach(context.MasterCollection.Where(x=>x.Name[0].ToString().ToLower()==btn.Text.ToLower())中的TMDB_Person)
context.ActorCollection.Add(person);
}
其他的
{
context.ActorCollection=context.MasterCollection;
}
}
ActorCollection=MasterCollection代码>-这将替换集合引用,但不会复制集合ObservableCollection
属性应该是get
-only,并由readonly
字段支持(因此它们不能替换引用)。一般来说,您不应该在类构造函数中执行IO(最大的线索是,您不能在构造函数中使用async
方法)。你应该用工厂方法来代替。