尝试学习xaml设计。我从互联网上得到了这张照片并将其用作练习模型。有一个问题:当我单击其中一个日期按钮时,会出现一个带有日期任务列表的滚动查看器。每个任务都有一个从开始时间到结束时间的一天中的小时列表。我不知道它们是来自一个来源还是两个来源(一个描述了日期任务,另一个是这个任务的小时列表)。
我试过这个
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
。有没有人有任何建议我怎么做?
答案 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
媒体资源。