Xamarin中的Carousel视图表示不加载不同的模板

时间:2018-02-16 08:45:41

标签: xamarin xamarin.forms carousel

// This looks horrible 
//_context.Note.Where(x => x.Order == oldIdx).First().Order = newIdx - 1;

// ahh.. my eyes
var note = _context.Note.Where(x => x.Order == oldIdx).FirstOrDefault();

// sanity check
if(Note == null)
{
    return;
}

note.Order = newIdx - 1;

// save it back to the DB
_context.SaveChanges();

// get your new awesome ordered list
var list = _context.Note.OrderBy(x => x.Order).ToList(); 

将这些数据模板添加到列表中。

public DataTemplate CreateQuestionAnswerRadioButtonTemplate(string question, List<string> answers){

        DataTemplate template = new DataTemplate(() =>
        {
            StackLayout parentLayout = new StackLayout()
            {
                Padding = new Thickness(20, 20, 20, 20),
                HeightRequest = 500,
            };
            ScrollView surveyScrollView = new ScrollView()
            {
                Orientation = ScrollOrientation.Vertical,
            };
            StackLayout questionLayout = new StackLayout()
            {
                Padding = new Thickness(5, 5, 5, 5),
                HeightRequest = 500,
            };

            Label questLabel = new Label();
            questLabel.Text = question;
            questLabel.TextColor = Color.FromHex("#EF4D80");
            questLabel.FontAttributes = FontAttributes.Bold;
            questLabel.FontSize = 18;
            BindableRadioGroup radioGroup = new BindableRadioGroup(false);
            radioGroup.ItemsSource = answers;
            questionLayout.Children.Add(questLabel);
            questionLayout.Children.Add(radioGroup);
            surveyScrollView.Content = questionLayout;
            parentLayout.Children.Add(surveyScrollView);
            return parentLayout;
        });
        return template;
    }

现在当我滑动Carousel时,如何加载dataTemplates [1或2或3]? 我有一个下一个按钮,其中在设置Carousel视图的项目源为dataTemplates [1]但模板没有更新

请建议正确的方法?

new CarouselView
        {
            Margin = new Thickness(0, 20, 0, 0),
            ItemsSource = dataTemplates,
            ItemTemplate = dataTemplates[0],

        };

1 个答案:

答案 0 :(得分:1)

CarouselView需要DataTemplateSelector

在您的代码页面后面的

new CarouselView
{
    Margin = new Thickness(0, 20, 0, 0),
    ItemsSource = dataTemplates,
    ItemTemplate = new SurveyDataTemplateSelector()
};

SurveyDataTemplateSelector

DataTemplate survey1Template;
DataTemplate survey3Template;
DataTemplate survey4Template;
DataTemplate survey5Template;

public SurveyDataTemplateSelector()
{
    survey1Template = CreateQuestionAnswerRadioButtonTemplate(Constants.SurveyQuestion_1, SurveyQuestion_1_Answers);
    survey3Template = CreateQuestionAnswerRadioButtonTemplate(Constants.SurveyQuestion_3, SurveyQuestion_3_Answers);
    survey4Template = CreateQuestionAnswerRadioButtonTemplate(Constants.SurveyQuestion_4, SurveyQuestion_4_Answers);
    survey5Template = CreateQuestionAnswerRadioButtonTemplate(Constants.SurveyQuestion_5, SurveyQuestion_5_Answers);
}

protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
    // Here you define which DataTemplate is selected, for example:
    if (item == null)
    {
        return null;
    }

    SurveyAnswers answers = item as SurveyAnswers;

    if (answers.question == 1)
    {
        return survey1Template;
    }
    else if (answers.question == 3)
    {
        return survey3Template;
    }
    else if (answers.question == 4)
    {
        return survey4Template;
    }
    else if (answers.question == 5)
    {
        return survey5Template;
    }

    return null; 
}

查看此链接,获取Xamarin提供的优质文档:https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/templates/data-templates/selector/