Связывание другого ItemSource внутри FlipView DataContext WPF

В настоящее время я работаю с мобильным приложением 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, NextDate и PrevDate, а в FlipView можно использовать Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=ColumnHeadInfo}. Но я пока точно не знаю, что мне делать.


person Tan Dat    schedule 28.10.2015    source источник


Ответы (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>
person luojana    schedule 28.10.2015
comment
Но когда я переверну, он перевернет оба элемента! и это совершенно не то, что я ожидал :( - person Tan Dat; 10.11.2015