Size: a a a

Xamarin Developers

2021 January 18

TV

Tursunali Vositov in Xamarin Developers
Всем привет.
Есть CollectionView. Пытаюсь заполнить данные:
public bool IsBusy { get; set; }  //для ActivityIndicator      
public IEnumerable<MyModel> MyModelList { get; set; }

public MyModelListViewModel() //Конструктор класса. Этот класс назначается в качестве BindingContext
       {
           IsBusy = true;

           Task.Run(async () =>
           {
               MyModelList = await new MyModelService().GetMyModelsAsync();
               IsBusy = false;
           });
       }

Из класса MyModelsService берутся данные:
public ObservableCollection<MyModel> MyModels { get; set; }

public MyModelService()
       {
           MyModels = new ObservableCollection<MyModel>();

           MyModel.Add(...);
           MyModel.Add(...);
       }
public async Task<ObservableCollection<MyModel>> GetMyModelsAsync()
       {          
           return await Task.FromResult(MyModel);
       }

В CollectionView ничего не показывает
источник
2021 January 19

MO

Mr. Onion in Xamarin Developers
Tursunali Vositov
Всем привет.
Есть CollectionView. Пытаюсь заполнить данные:
public bool IsBusy { get; set; }  //для ActivityIndicator      
public IEnumerable<MyModel> MyModelList { get; set; }

public MyModelListViewModel() //Конструктор класса. Этот класс назначается в качестве BindingContext
       {
           IsBusy = true;

           Task.Run(async () =>
           {
               MyModelList = await new MyModelService().GetMyModelsAsync();
               IsBusy = false;
           });
       }

Из класса MyModelsService берутся данные:
public ObservableCollection<MyModel> MyModels { get; set; }

public MyModelService()
       {
           MyModels = new ObservableCollection<MyModel>();

           MyModel.Add(...);
           MyModel.Add(...);
       }
public async Task<ObservableCollection<MyModel>> GetMyModelsAsync()
       {          
           return await Task.FromResult(MyModel);
       }

В CollectionView ничего не показывает
С потоками играетесь
источник

MO

Mr. Onion in Xamarin Developers
Заполняйте калекшнвью на главном потоке
источник

MO

Mr. Onion in Xamarin Developers
BeginInvokeOnMainThread гуглите
источник

dd

dudu dida in Xamarin Developers
Mr. Onion
С потоками играетесь
Таки property changed что-то в данном куске не заметно, да и там вообще не понятно, что и куда сетается
источник

dd

dudu dida in Xamarin Developers
Для чего есть и инициализируется MyModels, если в неё ничего не добавляется
источник

TV

Tursunali Vositov in Xamarin Developers
Mr. Onion
BeginInvokeOnMainThread гуглите
Учел замечания. Всё равно не показывает. Получился такой код:
class MyModelListViewModel : INotifyPropertyChanged
   {
       public event PropertyChangedEventHandler PropertyChanged;
       protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
       {
           PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
       }
 
       private ObservableCollection<MyModel> myModelList;
       public ObservableCollection<MyModel> MyModelList
       {
           get { return myModelList; }
           set { myModelList = value; OnPropertyChanged(); }
       }

       public MyModelListViewModel()
       {
           Device.BeginInvokeOnMainThread(() => {
               MyModelList = new MyModelService().MyModels; //Из класса MyModelService берет заполненное данными поле MyModels типа ObservableCollection
           });
       }        
   }
источник

MO

Mr. Onion in Xamarin Developers
Tursunali Vositov
Учел замечания. Всё равно не показывает. Получился такой код:
class MyModelListViewModel : INotifyPropertyChanged
   {
       public event PropertyChangedEventHandler PropertyChanged;
       protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
       {
           PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
       }
 
       private ObservableCollection<MyModel> myModelList;
       public ObservableCollection<MyModel> MyModelList
       {
           get { return myModelList; }
           set { myModelList = value; OnPropertyChanged(); }
       }

       public MyModelListViewModel()
       {
           Device.BeginInvokeOnMainThread(() => {
               MyModelList = new MyModelService().MyModels; //Из класса MyModelService берет заполненное данными поле MyModels типа ObservableCollection
           });
       }        
   }
А в xaml точно всё как надо прописали?
источник

TV

Tursunali Vositov in Xamarin Developers
Mr. Onion
А в xaml точно всё как надо прописали?
<ContentView.BindingContext>
       <viewmodels:MyModelListViewModel/>
   </ContentView.BindingContext>
...
<CollectionView ItemsSource="{Binding MyModelList}"
                       SelectionMode="None"                              
                       HorizontalScrollBarVisibility="Never"
                       VerticalScrollBarVisibility="Always"
                       Grid.Row="0"
                       Margin="15"
                       HorizontalOptions="FillAndExpand"
                       VerticalOptions="StartAndExpand">
источник

MO

Mr. Onion in Xamarin Developers
Tursunali Vositov
<ContentView.BindingContext>
       <viewmodels:MyModelListViewModel/>
   </ContentView.BindingContext>
...
<CollectionView ItemsSource="{Binding MyModelList}"
                       SelectionMode="None"                              
                       HorizontalScrollBarVisibility="Never"
                       VerticalScrollBarVisibility="Always"
                       Grid.Row="0"
                       Margin="15"
                       HorizontalOptions="FillAndExpand"
                       VerticalOptions="StartAndExpand">
А что за grid ещё там
источник

TV

Tursunali Vositov in Xamarin Developers
Mr. Onion
А что за grid ещё там
это для разделения интерфейса
источник

MO

Mr. Onion in Xamarin Developers
Просто если высота этой первой строчки очень маленькая то не факт что колекшн вью вообще отображается
источник

MO

Mr. Onion in Xamarin Developers
Ещё советую попробывать с listview ибо у меня были траблы на последней версии с колекшн
источник

TV

Tursunali Vositov in Xamarin Developers
Mr. Onion
Просто если высота этой первой строчки очень маленькая то не факт что колекшн вью вообще отображается
с этим проблем нет. если myModelList присвоить new MyModelService().MyModels не внутри BeginInvokeOnMainThread, тогда работает
источник

MO

Mr. Onion in Xamarin Developers
Tursunali Vositov
с этим проблем нет. если myModelList присвоить new MyModelService().MyModels не внутри BeginInvokeOnMainThread, тогда работает
Ну и все тогда
источник

MO

Mr. Onion in Xamarin Developers
Зачем тогда Вам Таски были там в первом коде что Вы скидывали?)
источник

TV

Tursunali Vositov in Xamarin Developers
Mr. Onion
Ну и все тогда
проблема в том что список загружается долго и интерфейс зависает
источник

MO

Mr. Onion in Xamarin Developers
А
источник

MO

Mr. Onion in Xamarin Developers
Вы хотите чтоб индикатор крутился типа пока грузится там то что надо?
источник

TV

Tursunali Vositov in Xamarin Developers
да
источник