XAML:使用2个源绑定scrollviewer

时间:2014-08-14 02:03:08

标签: xaml data-binding windows-phone

尝试学习xaml设计。我从互联网上得到了这张照片并将其用作练习模型。有一个问题:当我单击其中一个日期按钮时,会出现一个带有日期任务列表的滚动查看器。每个任务都有一个从开始时间到结束时间的一天中的小时列表。我不知道它们是来自一个来源还是两个来源(一个描述了日期任务,另一个是这个任务的小时列表)。  enter image description here

我试过这个

public async void ShowTasks()
    {
        ObservableCollection<DayTask> Data = await App.DataSource.GetData();
        DateListBox.ItemsSource = Data;

        DayTask daytask = Data.Where(x => x.Day.Date == App.Day.Date).FirstOrDefault();
        TasksListView.ItemsSource = daytask.Tasks;

        List<HoursModel> HoursList = new List<HoursModel>();
        foreach (var simpletask in daytask.Tasks)
        {
            HoursList.Add(new HoursModel(simpletask.StartTimeHour, simpletask.EndTimeHour));
        }
        HoursListView.ItemSource = HoursList;
    }

这是我的xaml代码:

<ScrollViewer Height="730" Width="300" >
            <ListView 
                    x:Name="TasksListView" Height="730" Width="300" 
                    HorizontalAlignment="Right">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="7*"/>                                                      
                            </Grid.ColumnDefinitions>
                            <ListView 
                                Grid.Column="0"
                                x:Name="HoursListView">
                                <ListView.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock 
                                            x:Name="ShowedHours"
                                            Text="{Binding}"/>
                                    </DataTemplate>
                                </ListView.ItemTemplate>
                            </ListView>
                            <Grid Grid.Column="1">
                                <Rectangle 
                                    Fill="Pink"
                                    Height="75"
                                    Width="150"
                                    Margin="60,20,0,0"/>
                                <TextBlock
                                    Text="{Binding Description}"
                                    FontSize="17"
                                    TextWrapping="Wrap"
                                    Margin="80,20,0,0"/>
                            </Grid>


                        </Grid>

                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </ScrollViewer>

我在HoursListView.ItemSource = HoursList;时遇到错误。这个错误的细节是 The name 'HoursListView' does not exist in the current context。有没有人有任何建议我怎么做?

1 个答案:

答案 0 :(得分:0)

您无法直接通过DataTemplate的名称访问控制权。这是有道理的,因为在这种情况下DataTemplate是为TasksListView中的每个项目重复生成的。

根据发布的XAML标记,您希望每个HoursList使用不同的DayTask。这可以通过在HoursList类中添加DayTask属性来实现。我建议使用ObservableCollection代替List,因为前者具有内置功能,可以在项目添加到集合中或从集合中删除时通知绑定的UI刷新:

public class DayTask
{
    public ObservableCollection<HoursModel> HoursList { get; set; }
    .....
}

然后将HoursListView&#39; s ItemsSource绑定到以上属性:

.....
<DataTemplate>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="7*"/>                                                      
        </Grid.ColumnDefinitions>
        <ListView 
            Grid.Column="0"
            ItemsSource="{Binding HoursList}"
            x:Name="HoursListView">
            .....
        </ListView>
    </Grid>
</DataTemplate>
.....

在设置HoursList之前,不要忘记填充所有DateListBox.ItemsSource媒体资源。