2014-08-14 5 views
1

Попытка изучения дизайна xaml. Я получил эту картину из Интернета и использовал ее в качестве модели для практики. Возникает проблема: когда я нажимаю одну из кнопок дня, появляется scrollviewer со списком дневных задач. Каждая задача имеет список часов в день, от времени начала до конца. Я не знаю, являются ли они источником из одного источника или 2 (один описывает дневную задачу, а другой - список часов этой задачи). enter image description hereXAML: привязка scrollviewer с 2-мя источниками

Я пытался с этим

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

У вас нет доступа к управлению в DataTemplate непосредственно по его названию. Это имеет смысл, потому что в этом случае генерируется повторно для каждого элемента в пределах TasksListView.

Согласно размещенной пометке XAML, вы хотите иметь разные HoursList для каждого DayTask. Этого можно достичь, добавив HoursList в класс DayTask. Я хотел бы предложить использовать ObservableCollection вместо List, так как бывшие имеет встроенную функцию для уведомления связанного пользовательского интерфейса для обновления каждый раз, когда элемент добавляется или удаляется из коллекции:

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

Затем связать HoursListView «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.

+0

спасибо, я исправил его, и он отлично работает сейчас. –

Смежные вопросы