【问题标题】:Binding different ItemSource inside FlipView DataContext WPF在 FlipView DataContext WPF 中绑定不同的 ItemSource
【发布时间】:2015-10-28 06:58:04
【问题描述】:

我目前正在使用 Windows 10 移动应用程序。我有一个简单的 DateTime 列表,如下所示:

public DateTime NextDate { get; set;}
public DateTime PrevDate { get; set;}
// list of date
public List<DateTime> DateList { get; set; }

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    DateTime beginDate = new DateTime(2015, 9, 22);
    DateTime endDate = DateTime.Today;
    DateList = new List<DateTime>();
    for (DateTime date = beginDate; date < endDate; date = date.AddDays(1))
    {
        DateList.Add(date);
    }
}

现在我想显示它的翻转视图,不仅是一天,而且是 3 天:当天、前一天和后天。

这是我的 XAML 代码:

<FlipView x:Name="dateFlipView" BorderBrush="Azure" Height="100"
            ItemsSource="{Binding DateList}" SelectionChanged="dateFlipView_SelectionChanged">
    <FlipView.ItemTemplate>
        <DataTemplate>
            <!-- show previous date -->
            <Canvas Height="100" Width="100" Background="#FF7683FF">
                <StackPanel Width="100" HorizontalAlignment="Left">
                    <TextBlock Text="{Binding Day}" Style="{StaticResource HeaderTextBlockStyle}" HorizontalAlignment="Center"/>
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                        <TextBlock Text="{Binding Month}" Margin="0,0,8,0" Style="{StaticResource CaptionTextBlockStyle}"/>
                        <TextBlock Text="{Binding Year}" HorizontalAlignment="Right" Style="{StaticResource CaptionTextBlockStyle}"/>
                    </StackPanel>
                    <StackPanel>
                        <TextBlock Text="{Binding Day}"/>
                    </StackPanel>
                </StackPanel>
            </Canvas>
            <!-- show next date -->
        </DataTemplate>
    </FlipView.ItemTemplate>
</FlipView>

上面的代码只显示了一个日期。

我找到了一个解决方案,我可以添加 2 个 DateTime 属性,NextDatePrevDate,并且在 FlipView 中,可以使用绑定 RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=ColumnHeadInfo}。但我还不知道我到底应该做什么。

【问题讨论】:

    标签: c# wpf xaml windows-10-mobile flipview


    【解决方案1】:

    您可以通过自定义类型列表来实现此目的,该列表将保存您的数据,如下所示。

    public class DateTimeModel
    {
        public DateTime PreviousDate { get; set; }
    
        public DateTime NextDate { get; set; }
    
        public DateTime CurrentDate { get; set; }
    }
    

    这里列出人口:

            DateTime beginDate = new DateTime(2015, 9, 22);
            DateTime endDate = DateTime.Today;
            DateList = new List<DateTimeModel>();
            DateTimeModel model; 
    
            for (DateTime date = beginDate; date < endDate; date =     date.AddDays(1))
            {
                model = new DateTimeModel();
                model.PreviousDate = date.AddDays(-1);
                model.CurrentDate = date;
                model.NextDate = date.AddDays(1);
                DateList.Add(model);
            }
    

    您可以获取每个模型对象,并将其添加到 ItemTemplate 上下文的列表中。您可以从 DataContext 访问这些属性,如下所示。

        <ItemsControl x:Name="dateFlipView" BorderBrush="Azure" Height="100"
            ItemsSource="{Binding DateList}" >
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <!-- show previous date -->
                    <Canvas Height="100" Width="100" Background="#FF7683FF">
                        <StackPanel Width="100" HorizontalAlignment="Left">
                            <TextBlock Text="{Binding PreviousDate.Day}" Style="{StaticResource HeaderTextBlockStyle}" HorizontalAlignment="Center"/>
                            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                                <TextBlock Text="{Binding PreviousDate.Month}" Margin="0,0,8,0" Style="{StaticResource CaptionTextBlockStyle}"/>
                                <TextBlock Text="{Binding PreviousDate.Year}" HorizontalAlignment="Right" Style="{StaticResource CaptionTextBlockStyle}"/>
                            </StackPanel>
                            <StackPanel>
                                <TextBlock Text="{Binding PreviousDate.Day}"/>
                            </StackPanel>
                        </StackPanel>
                        <StackPanel Width="100" HorizontalAlignment="Left">
                            <TextBlock Text="{Binding NextDate.Day}" Style="{StaticResource HeaderTextBlockStyle}" HorizontalAlignment="Center"/>
                            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                                <TextBlock Text="{Binding NextDate.Month}" Margin="0,0,8,0" Style="{StaticResource CaptionTextBlockStyle}"/>
                                <TextBlock Text="{Binding NextDate.Year}" HorizontalAlignment="Right" Style="{StaticResource CaptionTextBlockStyle}"/>
                            </StackPanel>
                            <StackPanel>
                                <TextBlock Text="{Binding NextDate.Day}"/>
                            </StackPanel>
                        </StackPanel>
                    </Canvas>
                    <!-- show next date -->
    
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    

    【讨论】:

    • 但是当我翻转时,它会翻转三个项目!这绝对不是我所期望的:(
    猜你喜欢
    • 2015-06-05
    • 2010-10-26
    • 2020-12-22
    • 1970-01-01
    • 2016-11-25
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多