Xamarin 表单中的轮播视图未响应视图中的图像按钮

问题描述

我无法使用图像按钮将轮播图像移到列表中的下一个。当我单击图像按钮并逐步执行代码时,位置正在正确更改,但不会在视图中移动轮播。任何帮助将不胜感激。这是我的视图和视图模型的代码

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Das_Local.Views.MainPage"
             xmlns:vm="clr-namespace:Das_Local.viewmodels"
             Title="{Binding Title}">
    <ContentPage.BindingContext>
        <vm:Mainviewmodel/>
    </ContentPage.BindingContext>

    <ContentPage.Resources>
        <ResourceDictionary>
            <Color x:Key="Accent">#96d1ff</Color>
        </ResourceDictionary>
    </ContentPage.Resources>

    <ContentPage.Content>
        <StackLayout>
            <StackLayout VerticalOptions="Start">
                <CarouselView ItemsSource="{Binding Images}" HorizontalOptions="FillAndExpand" HeightRequest="375">
                    <CarouselView.ItemTemplate>
                        <DataTemplate>
                            <Image Source="{Binding ImageUrl}" Aspect="AspectFill" />
                        </DataTemplate>
                    </CarouselView.ItemTemplate>
                </CarouselView>
            </StackLayout>
            <StackLayout>
                <Label Text="Whats New in the Local"  FontSize="Title" HorizontalTextAlignment="Center" Margin="0,10,-10"/>
                <Grid HorizontalOptions="FillAndExpand" VerticalOptions="CenterandExpand">
                    <Grid.RowDeFinitions>
                        <RowDeFinition Height="Auto"/>
                    </Grid.RowDeFinitions>
                    <CarouselView Grid.Row="1" HorizontalOptions="FillAndExpand" ItemsSource="{Binding Articles}">
                        <CarouselView.ItemTemplate>
                            <DataTemplate>
                                <Frame HasShadow="True">
                                    <StackLayout Margin="0,0">
                                        <Label Text="{Binding ArticleTitle}"  FontAttributes="Bold" FontSize="Title"/>
                                        <Label Text="{Binding ArticleTextBody}" FontSize="Body" />
                                    </StackLayout>
                                </Frame>
                            </DataTemplate>
                        </CarouselView.ItemTemplate>
                    </CarouselView>
                    <ImageButton Grid.Row="1" Source="left.png" Aspect="Fill" HorizontalOptions="Start" VerticalOptions="Center" BackgroundColor="Transparent"
                                 HeightRequest="35" WidthRequest="35" Command="{Binding ChangePositionCommand}" CommandParameter="L"/>
                    <ImageButton Grid.Row="1" Source="right.png" Aspect="Fill" HorizontalOptions="End" VerticalOptions="Center" BackgroundColor="Transparent"
                                 HeightRequest="35" WidthRequest="35" Command="{Binding ChangePositionCommand}" CommandParameter="R"/>
                </Grid>
            </StackLayout>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

--------------------------------------------------------------------------------------------------
using System.Collections.ObjectModel;
using System.Windows.Input;
using Das_Local.Models;
using Xamarin.Forms;

namespace Das_Local.viewmodels
{
    class Mainviewmodel : Baseviewmodel
    {
        public Mainviewmodel()
        {
            Title = "SMART 29";
            images = GetCarouselImages();
            articles = GetCarouselArticles();
            ChangePositionCommand = new Command(ChangePosition);
        }
        private ObservableCollection<CarouselImages> images;
        public ObservableCollection<CarouselImages> Images
        {
            get { return images; }
            set
            {
                images = value;
                OnPropertyChange();
            }
        }

        private ObservableCollection<CarouselImages> GetCarouselImages()
        {
            return new ObservableCollection<CarouselImages>
            {
                new CarouselImages { ImageUrl= "anglewrappedduct.jpg" },new CarouselImages { ImageUrl = "ductrun.jpg" },new CarouselImages { ImageUrl = "offset.jpg" },new CarouselImages { ImageUrl = "panels.jpg" }
            };
        }

        ObservableCollection<CarouselArticles> articles;
        public ObservableCollection<CarouselArticles> Articles
        {
            get { return articles; }
            set
            {
                articles = value;
                OnPropertyChange();
            }
        }
        private ObservableCollection<CarouselArticles> GetCarouselArticles()
        {
            return new ObservableCollection<CarouselArticles>
            {
                new CarouselArticles { ArticleTitle= "This Title",ArticleTextBody = "Body of the article will go here"},new CarouselArticles { ArticleTitle = "Another Title",ArticleTextBody = "Just what I need more text for the article body" },new CarouselArticles { ArticleTitle = "My Third Title",ArticleTextBody = "I am getting burned out on writing random things"},new CarouselArticles { ArticleTitle = "Bravo",ArticleTextBody = "whats the deal with these free channels"}
            };
        }
        public ICommand ChangePositionCommand { get; set; }
        private CarouselArticles selectedarticle;
        public CarouselArticles SelectedArticle
        {
            get { return selectedarticle; }
            set
            {
                selectedarticle = value;
                OnPropertyChange();
            }
        }
        private int position;
        public int Position
        {
            get { return position; }
            set
            {
                position = value;
                selectedarticle = articles[position];

                OnPropertyChange(nameof(SelectedArticle));
            }
        }
        private void ChangePosition(object obj)
        {
            string direction = (string)obj;
            if (direction == "L")
            {
                if (position == 0)
                {
                    Position = articles.Count - 1;
                    return;
                }

                Position -= 1;
            }
            else if (direction == "R")
            {
                if (position == articles.Count - 1)
                {
                    Position = 0;
                    return;
                }

                Position += 1;
            }
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)