2012-12-16 2 views
0

나는 Entity Framework 4.0 Observable Collection 및 몇 가지 CollectionViewSources를 사용하는 WPF 응용 프로그램을 사용하고 있습니다. 내 양식에 나는 두 개의 텍스트 상자를 사용하여 내 데이터를 필터링하고 그것을 필터링하여 무엇을 기반으로 목록 상자에 표시합니다. 내가해야 할 일은 사용자가 목록 상자에서 항목을 선택하고 단추 ("선택")를 누르면 정보가 적절한 새 창에 적절한 모음으로 표시됩니다. 지금까지 내가 가진 :목록 상자에서 새 창에 대한 데이터 소스로 선택된 항목

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 

내가이 일의 적절한 방법을 보여주는 예제를 찾을 수있는 곳 나는이 작업을 수행 또는 수있는 방법에 대한 생각은 매우 감사하겠습니다. 감사. Adam 죄송합니다. 도움이 될 경우 MVVM을 사용하지 마십시오.

+0

[this] (http://stackoverflow.com/a/7498780/1069200) 질문에 대한 답변 –

+0

MVVM을 사용하고 있지 않습니다. – ajk825

답변

1

모델 ProjectMyChoice 창 클래스의 매개 변수로 지정하십시오. 창에 필요한지 여부에 따라 을 MyChoice 생성자의 필수 또는 선택적 매개 변수로 지정합니다. 새로운 윈도우의 레이아웃 루트에 대한 데이터 컨텍스트로 설정하거나, Window 클래스 자체의 속성으로 설정하거나,보기 모델에 배치하십시오. 어느 것이 든 적합합니다.

관련 문제