После привязки Xamarin Forms CollectionView остается пустым - PullRequest
0 голосов
/ 06 января 2020

У меня проблема. Я создал этот класс, который создает ImageSource коллекцию ObservableCollection<TemplateSource>:

public class TemplateListViewModel
{
    public ObservableCollection<TemplateSource> sourceList { get; set; }

    public TemplateListViewModel()
    {
        sourceList = new ObservableCollection<TemplateSource>();
        loadingTemplates += onLoadingTemplates;
        LoadTemplateList();
    }

    private event EventHandler loadingTemplates = delegate { };

    private void LoadTemplateList()
    {
        loadingTemplates(this, EventArgs.Empty);
    }

    private async void onLoadingTemplates(object sender, EventArgs args)
    {
        List<Template> templateList = await App.RestService.GetTemplates(App.User);

        foreach (var template in templateList)
        {
            ImageSource source = ImageSource.FromUri(new Uri("mysite.org/myapp/" + template.FileName));
            TemplateSource templateSource = new TemplateSource { Id = template.Id, Source = source };
            sourceList.Add(templateSource);
        }
    }
}

И в моем XAML я использую этот код:

<ContentPage.Content>
    <StackLayout HorizontalOptions="Fill">
        <Frame IsClippedToBounds="True" HeightRequest="45" CornerRadius="5" Padding="0" Margin="15,15,15,0" BackgroundColor="Transparent">
            <Entry Placeholder="Search" ReturnType="Done" PlaceholderColor="Gray" x:Name="txtSearch" Margin="5,0,0,0" TextColor="White" />
        </Frame>

        <CollectionView ItemsLayout="HorizontalList" ItemsSource="{Binding sourceList}">
            <CollectionView.ItemTemplate>
                <DataTemplate>

                    <ff:CachedImage
                Source="{Binding .}"
                VerticalOptions="Center"
                HorizontalOptions="Fill" />

                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </StackLayout>
</ContentPage.Content>

И наконец в page.xaml.cs (код позади):

protected override void OnAppearing()
{
    TemplateListViewModel vm = new TemplateListViewModel();
    BindingContext = vm;
    base.OnAppearing();
}

Теперь я уже получил помощь по этому коду от @Deczaloth, но он не мог понять, почему CollectionView остается пустым после того, как я свяжу это. Теперь я уже проверил, но sourceList заполняется, так что это не проблема.

Что я делаю не так?

1 Ответ

1 голос
/ 07 января 2020

Я вижу одну потенциальную проблему в вашем коде XD:

Когда вы связываете Source свойство CachedImage, вы устанавливаете привязку на ".", но вместо этого вам следует привязать к Source свойство класса TemplateSource (в вашем контексте "." означает элемент TemplateSource!), то есть вы должны изменить свой код следующим образом:

<ff:CachedImage
    Source="{Binding Source}"
    VerticalOptions="Center"
    HorizontalOptions="Fill" />
...