2012-12-16 70 views
0

我有一個WPF應用程序,我正在使用實體框架4.0一個Observable集合和一些CollectionViewSource。在我的表單中,我有兩個文本框用於過濾數據,然後根據我過濾的內容將其顯示到列表框中。我需要做的是讓用戶從列表框中選擇一個項目並點擊按鈕(「選擇」),並在全新窗口中將信息顯示在適當的集合中。 到目前爲止,我有:列表框選擇項目作爲新窗口的數據源

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 

我如何能做到這一點還是在那裏我能找到顯示這樣做的正確方法的例子任何想法,將非常感激。謝謝。 亞當 對不起....如果這有幫助,不使用MVVM。

+0

我認爲[this](http://stackoverflow.com/a/7498780/1069200)回答你的問題 –

+0

我沒有使用MVVM。 – ajk825

回答

1

使您的模型Project成爲MyChoice窗口類的參數。根據窗口是否需要,請將Project作爲MyChoice構造函數的必需參數或可選參數。將其設置爲新窗口布局根的數據上下文,將其設置爲Window類本身的屬性,或將其設置在View模型中;以適用者爲準。