Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin forms-获取值时MVVM可观察集合始终为0_C#_Xamarin_Mvvm - Fatal编程技术网

C# Xamarin forms-获取值时MVVM可观察集合始终为0

C# Xamarin forms-获取值时MVVM可观察集合始终为0,c#,xamarin,mvvm,C#,Xamarin,Mvvm,我有两个可观察的集合,其想法是加载主集合,其中包含来自与表单相关的数据库的所有数据。我将筛选此集合,并使用筛选结果设置Actor集合。我尝试这样做的原因是为了减少将b64图像转换为ImageSource以用于更大集合所需的时间。我只想转换这些图像一次 Onload表单主集合填充了所需的项,但当我单击筛选选项时,主集合始终为0。我可以看到onload 119个条目添加到集合中 public ActorCollectionVM(INavigation navigation) {

我有两个可观察的集合,其想法是加载主集合,其中包含来自与表单相关的数据库的所有数据。我将筛选此集合,并使用筛选结果设置Actor集合。我尝试这样做的原因是为了减少将b64图像转换为ImageSource以用于更大集合所需的时间。我只想转换这些图像一次

Onload表单主集合填充了所需的项,但当我单击筛选选项时,主集合始终为0。我可以看到onload 119个条目添加到集合中

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
方法)。你应该用工厂方法来代替。