2012-12-16 4 views
0

У меня есть приложение WPF, над которым я работаю, и использует Entity Framework 4.0 Observable Collection и несколько CollectionViewSources. В моей форме у меня есть два текстовых поля, которые я использую, чтобы отфильтровать мои данные, а затем отобразить их в списке на основе того, что я отфильтровал. Мне нужно сделать, чтобы пользователь выбрал элемент из списка и нажал кнопку («Выбрать»), и информация отобразится с соответствующими коллекциями в совершенно новом окне. До сих пор у меня есть:listbox selected item as data source for new window

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

Я думаю, что [это] (http://stackoverflow.com/a/7498780/1069200) отвечает на ваш вопрос –

+0

Я не использую MVVM. – ajk825

ответ

1

Сделайте свою модель Project параметром класса MyChoice. В зависимости от того, требуется ли это для окна, сделайте Project обязательным или необязательным параметром конструктора MyChoice. Задайте его как Контекст данных для Root Root нового окна, установите его как свойство самого класса Window или поместите его в View Model; в зависимости от того, что подходит.