Привязка списка wpf к списку - PullRequest
4 голосов
/ 02 января 2011

Я создал очень простое wpf-приложение, которое хочу использовать для записи времени в разных проектах. Я не использовал mvvm для этого, так как считаю излишним.

У меня есть форма, которая содержит выпадающий список и список. Я создал базовую модель сущности, как это alt text

Я пытаюсь связать комбинированный список с Project, и всякий раз, когда я выбираю элемент из комбинированного списка, он обновляет представление списка с помощью доступных задач, связанных с этим проектом.

Пока это мой xaml. У меня нет никакого кода позади, так как я просто нажал на это меню данных, а затем источники данных и перетащил элементы. Приложение загружается нормально, и поле со списком заполнено, однако в списке ничего не отображается.

Может кто-нибудь сказать мне, что я пропустил?

    <Window.Resources>
    <CollectionViewSource x:Key="tasksViewSource" d:DesignSource="{d:DesignInstance l:Task, CreateList=True}" />
    <CollectionViewSource x:Key="projectsViewSource" d:DesignSource="{d:DesignInstance l:Project, CreateList=True}" />
</Window.Resources>
<Grid DataContext="{StaticResource tasksViewSource}">
    <l:NotificationAreaIcon 
                  Text="Time Management" 
                  Icon="Resources\NotificationAreaIcon.ico"
                  MouseDoubleClick="OnNotificationAreaIconDoubleClick">
        <l:NotificationAreaIcon.MenuItems>
            <forms:MenuItem Text="Open" Click="OnMenuItemOpenClick" DefaultItem="True" />
            <forms:MenuItem Text="-" />
            <forms:MenuItem Text="Exit" Click="OnMenuItemExitClick" />
        </l:NotificationAreaIcon.MenuItems>
    </l:NotificationAreaIcon>
    <Button Content="Insert" Height="23" HorizontalAlignment="Left" Margin="150,223,0,0" Name="btnInsert" VerticalAlignment="Top" Width="46" Click="btnInsert_Click" />
    <ComboBox Height="23" HorizontalAlignment="Left" Margin="70,16,0,0" Name="comProjects" VerticalAlignment="Top" Width="177" DisplayMemberPath="Project1" ItemsSource="{Binding Source={StaticResource projectsViewSource}}" SelectedValuePath="ProjectID" />
    <Label Content="Projects" Height="28" HorizontalAlignment="Left" Margin="12,12,0,0" Name="label1" VerticalAlignment="Top" IsEnabled="False" />
    <Label Content="Tasks" Height="28" HorizontalAlignment="Left" Margin="16,61,0,0" Name="label2" VerticalAlignment="Top" />
    <ListBox Height="112" HorizontalAlignment="Left" Margin="16,87,0,0" Name="lstTasks" VerticalAlignment="Top" Width="231" DisplayMemberPath="Task1" ItemsSource="{Binding Path=ProjectID, Source=comProjects}" SelectedValuePath="TaskID" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="101,224,0,0" Name="txtMinutes" VerticalAlignment="Top" Width="42" />
    <Label Content="Mins to Insert" Height="28" HorizontalAlignment="Left" Margin="12,224,0,0" Name="label3" VerticalAlignment="Top" />
    <Button Content="None" Height="23" HorizontalAlignment="Left" Margin="203,223,0,0" Name="btnNone" VerticalAlignment="Top" Width="44" />
</Grid>

1 Ответ

0 голосов
/ 02 января 2011

Вы устанавливаете DataContext в Grid, поэтому просто измените ваш ItemsSource, как указано ниже.

<Grid DataContext="{StaticResource tasksViewSource}"> 
  <ListBox Height="112"  
           HorizontalAlignment="Left"  
           Margin="16,87,0,0"  
           Name="lstTasks"  
           VerticalAlignment="Top"  
           Width="231"  
           DisplayMemberPath="Task1"  
           ItemsSource="{Binding}"  
           SelectedValuePath="TaskID" />  
 </Grid>

Вы также захотите отфильтровать список задач, чтобы просто изменить сгенерированный код.Вот пример, который я взломал вместе.Вы можете переключать значение, используя событие SelectionChanged из вашего ComboBox.

private System.Data.Objects.ObjectQuery<Models.Task> GetTasksQuery(Models.StackoverflowEntities stackoverflowEntities)
{
  // get the selected item
  int id = (int)cboProjects.SelectedValue;
  System.Data.Objects.ObjectQuery<CollectionViewSourceEF.Models.Task> tasksQuery = stackoverflowEntities.Tasks.Where(task => task.ProjectID == id) as ObjectQuery<Task>;
  return tasksQuery;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...