Wpf 列表框选定项作为新窗口的数据源

Wpf 列表框选定项作为新窗口的数据源,wpf,entity-framework-4,Wpf,Entity Framework 4,我有一个正在开发的WPF应用程序,它使用Entity Framework 4.0、一个可观察的集合和一些CollectionViewSources。在我的表单上,我有两个文本框,用于过滤数据,然后根据过滤结果将其显示在列表框中。我需要做的是让用户从列表框中选择一个项目,然后点击一个按钮(“选择”),信息将显示在一个全新的窗口中,其中包含适当的集合。 到目前为止,我已经: Imports System.Data.Objects Public Class SearchText Private d

我有一个正在开发的WPF应用程序,它使用Entity Framework 4.0、一个可观察的集合和一些CollectionViewSources。在我的表单上,我有两个文本框,用于过滤数据,然后根据过滤结果将其显示在列表框中。我需要做的是让用户从列表框中选择一个项目,然后点击一个按钮(“选择”),信息将显示在一个全新的窗口中,其中包含适当的集合。 到目前为止,我已经:

Imports System.Data.Objects

Public Class SearchText

Private db As New CraftingProjectsEntities
Private ProjectsData As ProjectsCollection

Private ProjectViewSource As CollectionViewSource
Private MaterialsViewSource As CollectionViewSource
Private ColoringsViewSource As CollectionViewSource
Private DirectionsViewSource As CollectionViewSource
Private SpecialsViewSource As CollectionViewSource

Private WithEvents ProjectView As ListCollectionView
Private MaterialsView As BindingListCollectionView
Private ColoringsView As BindingListCollectionView
Private SpecialsView As BindingListCollectionView
Private DirectionsView As BindingListCollectionView

Private Sub SearchText_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
    Dim query = From r In db.Projects
                                  Where r.Materials.Count > 1
                             Select r

     Me.ProjectViewSource = CType(Me.FindResource("ProjectsViewSource"), CollectionViewSource)
    Me.DirectionsViewSource = CType(Me.FindResource("DirectionsViewSource"), CollectionViewSource)
    Me.ColoringsViewSource = CType(Me.FindResource("ColoringsViewSource"), CollectionViewSource)
    Me.SpecialsViewSource = CType(Me.FindResource("SpecialsViewSource"), CollectionViewSource)
    Me.MaterialsViewSource = CType(Me.FindResource("MaterialsViewSource"), CollectionViewSource)
    Me.ProjectViewSource.Source = Me.ProjectsData

    Me.ProjectView = CType(Me.ProjectViewSource.View, ListCollectionView)
    Me.DirectionsView = CType(Me.DirectionsViewSource.View, BindingListCollectionView)
    Me.ColoringsView = CType(Me.ColoringsViewSource.View, BindingListCollectionView)
    Me.MaterialsView = CType(Me.MaterialsViewSource.View, BindingListCollectionView)
    Me.SpecialsView = CType(Me.SpecialsViewSource.View, BindingListCollectionView)


    MyLists.ItemsSource = ProjectsData

End Sub 

Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click

    Dim query2 As ObjectQuery(Of Project) = Nothing
    Dim query = From p In db.Projects
                Select p

    If TextBox2.Text.Length > 1 And TextBox1.Text.Length > 1 Then

        query2 = query.Where(Function(p) p.Materials.Any(Function(m) m.Material1.ToLower().Contains(Me.TextBox1.Text)) And
                 p.Materials.Any(Function(m) m.Material1.ToLower().Contains(Me.TextBox2.Text)))

    ElseIf TextBox2.Text.Length < 1 And TextBox1.Text.Length > 1 Then

        query2 = query.Where(Function(p) p.Materials.Any(Function(m) m.Material1.ToLower().Contains(Me.TextBox1.Text)))

    Else
        MessageBox.Show("What are you looking for?")
        Return
    End If

    Me.ProjectsData = New ProjectsCollection(query2.ToList(), db)
    MyLists.ItemsSource = ProjectsData

  End Sub
                           **Works great through here... Below is where i get lost trying to get the selected item to the new window**
  Private Sub btnSelect_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnSelect.Click
    Dim mychoice As New MyChoice
    Dim selitem = Me.MyLists.SelectedItem
    mychoice.ProjectsData = (selitem)
    mychoice.Show()
    Me.Close()
End Sub
End Class
导入System.Data.Objects
公共类搜索文本
私有数据库作为新的CraftingProjectSenties
专用项目数据作为项目集合
专用项目ViewSource作为CollectionViewSource
私有材质ViewSource作为CollectionViewSource
专用颜色ViewSource作为CollectionViewSource
专用方向ViewSource作为CollectionViewSource
专用专用ViewSource作为CollectionViewSource
Private WithEvents项目视图作为ListCollectionView
私有材质视图作为BindingListCollectionView
私有颜色视图作为BindingListCollectionView
私有特殊视图作为BindingListCollectionView
私有方向视图作为BindingListCollectionView
Private Sub SearchText_Loaded(发件人作为对象,e作为System.Windows.RoutedEventArgs)处理我。Loaded
Dim query=来自数据库项目中的r
其中r.Materials.Count>1
选择r
Me.ProjectViewSource=CType(Me.FindResource(“ProjectsViewSource”),CollectionViewSource)
Me.DirectionsViewSource=CType(Me.FindResource(“DirectionsViewSource”),CollectionViewSource)
Me.coloringViewSource=CType(Me.FindResource(“coloringViewSource”),CollectionViewSource)
Me.SpecialsViewSource=CType(Me.FindResource(“SpecialsViewSource”),CollectionViewSource)
Me.MaterialsViewSource=CType(Me.FindResource(“MaterialsViewSource”),CollectionViewSource)
Me.ProjectViewSource.Source=Me.ProjectsData
Me.ProjectView=CType(Me.ProjectViewSource.View,ListCollectionView)
Me.DirectionsView=CType(Me.DirectionsViewSource.View,BindingListCollectionView)
Me.ColoringsView=CType(Me.ColoringsViewSource.View,BindingListCollectionView)
Me.MaterialsView=CType(Me.MaterialsViewSource.View,BindingListCollectionView)
Me.SpecialsView=CType(Me.SpecialsViewSource.View,BindingListCollectionView)
MyLists.ItemsSource=项目数据
端接头
私有子按钮1\u单击(发件人作为System.Object,e作为System.Windows.RoutedEventArgs)处理按钮1。单击
Dim query2作为对象查询(项目的)=无
Dim query=来自数据库项目中的p
选择p
如果TextBox2.Text.Length>1和TextBox1.Text.Length>1,则
query2=query.Where(函数(p)p.Materials.Any(函数(m)m.Material1.ToLower().包含(Me.TextBox1.Text))和
p、 Materials.Any(函数(m)m.Material1.ToLower().包含(Me.TextBox2.Text)))
ElseIf TextBox2.Text.Length<1和TextBox1.Text.Length>1,然后
query2=query.Where(函数(p)p.Materials.Any(函数(m)m.Material1.ToLower().包含(Me.TextBox1.Text)))
其他的
MessageBox.Show(“你在找什么?”)
返回
如果结束
Me.ProjectsData=新项目集合(query2.ToList(),db)
MyLists.ItemsSource=项目数据
端接头
**在这里工作很好。。。下面是我在尝试将所选项目放到新窗口时迷路的地方**
私有子b选择\u单击(发件人作为System.Object,e作为System.Windows.RoutedEventArgs)处理b选择。单击
Dim mychoice作为新mychoice
Dim selitem=Me.MyLists.SelectedItem
mychoice.ProjectsData=(selitem)
mychoice.Show()
我
端接头
末级
任何关于我如何做到这一点的想法,或者我在哪里可以找到一个展示正确方法的例子,都将不胜感激。谢谢 亚当
很抱歉如果有帮助,不要使用MVVM。

将您的模型
项目
作为
MyChoice
窗口类的参数。根据窗口是否需要,将
Project
设置为
MyChoice
构造函数的必需或可选参数。将其设置为新窗口布局根目录的数据上下文,将其设置为窗口类本身的属性,或将其放置在视图模型中;无论哪个合适。

我想都能回答你的问题