将wpf列表框绑定到组合框

时间:2011-01-02 01:48:28

标签: wpf entity-framework-4

我创建了一个非常基本的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 :(得分:0)

您在网格中设置了DataContext,因此只需更改您的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>

您还需要过滤任务列表,只需更改生成的代码即可。 这是我一起入侵的一个例子。 您可以使用ComboBox中的SelectionChanged事件切换值。

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;
}