Wpf 列表框选定项作为新窗口的数据源
我有一个正在开发的WPF应用程序,它使用Entity Framework 4.0、一个可观察的集合和一些CollectionViewSources。在我的表单上,我有两个文本框,用于过滤数据,然后根据过滤结果将其显示在列表框中。我需要做的是让用户从列表框中选择一个项目,然后点击一个按钮(“选择”),信息将显示在一个全新的窗口中,其中包含适当的集合。 到目前为止,我已经:Wpf 列表框选定项作为新窗口的数据源,wpf,entity-framework-4,Wpf,Entity Framework 4,我有一个正在开发的WPF应用程序,它使用Entity Framework 4.0、一个可观察的集合和一些CollectionViewSources。在我的表单上,我有两个文本框,用于过滤数据,然后根据过滤结果将其显示在列表框中。我需要做的是让用户从列表框中选择一个项目,然后点击一个按钮(“选择”),信息将显示在一个全新的窗口中,其中包含适当的集合。 到目前为止,我已经: Imports System.Data.Objects Public Class SearchText Private d
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
构造函数的必需或可选参数。将其设置为新窗口布局根目录的数据上下文,将其设置为窗口类本身的属性,或将其放置在视图模型中;无论哪个合适。我想都能回答你的问题