绑定CarouselPage内容页面以查看模型

时间:2017-02-06 20:02:43

标签: xamarin xamarin.forms prism

我正在尝试在Xamarin Forms中使用CarouselPage。

terminate-instances

在视图模型中我有

<?xml version="1.0" encoding="utf-8" ?>
<CarouselPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             xmlns:views="clr-namespace:TestForms.Views;assembly=TestForms"
             prism:ViewModelLocator.AutowireViewModel="True"
             x:Class="TestForms.Views.Photos" ItemsSource="{Binding Pages}">
    <CarouselPage.ItemTemplate>
        <DataTemplate>
          <ContentPage >
          <StackLayout VerticalOptions="StartAndExpand" Padding="50">
            <Label Text="ContentPage"></Label>
            <Label Text="{Binding Title}"></Label>
            <Label Text="{Binding Description}"></Label>
          </StackLayout>
          </ContentPage>
        </DataTemplate>
    </CarouselPage.ItemTemplate>
</CarouselPage>

当我渲染时,我会得到所有照片的页面列表。但我似乎无法在单个页面中绑定标题或说明。 我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

您已正确连接CarouselPage

只需稍微更改您的视图模型。

我假设您的TitleDescription属性位于PhotoDetailViewModel

如果是这样,您在CarouselPage中创建的绑定无法正常工作,因为它已绑定到ContentPage列表,而CarouselPage列表中没有属性&#34;标题&#34 ;和&#34;描述&#34;

在您的ItemsSource中,您已经设置了BindingContext绑定,该绑定应自动设置CarouselPage中子网页的ObservableCollection。所以你不需要手动完成。

因此,请在ViewModel中创建PhotoDetailViewModel ItemsSource,并将CarouselPage的{​​{1}}绑定到该List<ContentPage> ContentPages = new List<ContentPage>(); foreach (var photo in Photos) { var page = new ContentPage(); page.BindingContext = new PhotoDetailViewModel(photo); ContentPages.Add(page); } Pages = new ObservableCollection<ContentPage>(ContentPages);

删除:

Pages = new ObservableCollection<PhotoDetailViewModel>(Photos.Select(p => new PhotoDetailViewModel(p)); 

并添加:

Pages

务必将ObservableCollection<PhotoDetailViewModel>的属性类型更改为(49807360, [[111206019,'ABC','XYZ:RDC' , 'RDC' , 123] , [111206019,'ABC','XYZ:RDC' , 'RDC' , 123]] , [[[111206019,'ABC','XYZ:RDC' , 'RDC' , 123] , 111206019,'ABC','XYZ:RDC' , 'RDC' , 123]] , [[111206019,'ABC','XYZ:RDC' , 'RDC' , 123],[111206019,'ABC','XYZ:RDC' , 'RDC' , 123]])

这应该是你需要改变的全部

答案 1 :(得分:0)

正如我所说,你应该使用ContentView而不是ContentPage。下面是工作示例

private async void OnClientConnected(object sender, EventArgs e)
{
    await Task.Run(() => HandleClientConnected(object, e));
}

protected abstract Task HandleClientConnected(object sender, EventArgs e);

第xml页

reshape(df, idvar="record", timevar="type", direction="wide")

#  record v1.orig v2.orig v3.orig v1.dupl v2.dupl v3.dupl
#1     r1       0       0       1       0       0       1
#3     r2       0       1       0      NA      NA      NA
#4     r3       0       0       1       0       0       1