2017-12-13 33 views
1

추가 방법 ListView 바인딩을 통해 Entity Framework/Linq를 통해 항목을 추가 하시겠습니까?Entity Framework/Linq에 의해 바인딩을 통해 ListView 항목을 추가하는 방법

<ListView x:Name="lstvw_Overview" HorizontalAlignment="Left" Height="310" Margin="11,89,0,0" VerticalAlignment="Top" Width="676"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Adresse" DisplayMemberBinding="{Binding address}"/> 
      </GridView> 
     </ListView.View> 
</ListView> 

Public Sub New() 
    Initialize() 
End Sub 
Dim address As String 
Dim items As ObservableCollection(Of Uebersicht) 
Public Structure Uebersicht 
    Private _address As String 
    Public Property address As String 
     Get 
      Return _address 
     End Get 
     Set(value As String) 
      _address = value 
     End Set 
    End Property 
End Structure 
Sub Initialize() 
    InitializeComponent() 
    fillListView() 
End Sub 
Sub fillListView() 
    Using container As New infrastrukturDB_TESTEntities1 
     Dim mailAddressList = From tbl_unzustellbarAdressen In container.tbl_unzustellbarAdressen 
     For Each mail In mailAddressList 
      address = mail.unzustellbarMail.ToString() 
      Try 
       items.Add(New Uebersicht With {.address = address}) 
      Catch ex As Exception 
       MessageBox.Show("Error") 
      End Try 

     Next 
    End Using 
End Sub 

EDIT 내 코드는 다음과 같습니다 :

는 여기 바인딩으로 XAML에서 내 ListView을받은 ObserverableCollection을 시도했지만 지금은 NullReferenceException있어! 내가 디버깅 경우 는, 주소가 null가 아닌 데이터를 .. 가지고

+0

당신은 당신이에 itemSource로 연결 무엇입니까 ObservableCollection에이 .xaml. VB에서 작동하는 방법을 잘 모르지만 비슷한 것이 있어야합니다. itemSource를 사용하지 않을 때는 Dispatcher에게 INotifyPropertyChanged를 사용하여 목록을 업데이트하라고 지시해야하지만 다시 C#에서만 알 수 있지만 솔루션 검색을위한 단서를 제공 할 수 있습니다. – Nekeniehl

+0

@Nekeniehl ObservableCollection은 .NET Framework 클래스이므로 지원되는 모든 언어로 사용할 수 있습니다. – Clemens

+0

@Raizzen ".xaml의 itemSource로 링크"는 ListView의 ItemsSource 속성을 항목 클래스의 ObservableCollection에 바인딩해야 함을 의미합니다. 'DisplayMemberBinding = "{Binding address}"'라고 쓰면 항목 클래스는'address'라는 이름의 public 속성을 갖게됩니다. – Clemens

답변

4

당신이 ListViewstrings를 추가하기 때문에, 당신은 address 재산하지만 소스 개체 자체에 결합해서는 안 :

<ListView x:Name="lstvw_Overview" HorizontalAlignment="Left" Height="310" Margin="11,89,0,0" VerticalAlignment="Top" Width="676"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Adresse" DisplayMemberBinding="{Binding}"/> 
     </GridView> 
    </ListView.View> 
</ListView> 

편집 : 항목을 추가하려면 먼저 ObservableCollection을 초기화해야합니다. 그리고 ObservableCollection에 결합 할 수 있도록, 당신은 속성으로 노출해야합니다

Public Sub New() 
    Initialize() 
End Sub 

Dim address As String 

Private _items As ObservableCollection(Of Uebersicht) = New ObservableCollection(Of Uebersicht) 
Public Property Items As ObservableCollection(Of Uebersicht) 
    Get 
     Return _items 
    End Get 
    Set(value As ObservableCollection(Of Uebersicht)) 
     _items = value 
    End Set 
End Property 

Sub Initialize() 
    InitializeComponent() 
    DataContext = Me 
    fillListView() 
End Sub 

XAML : C#에서

<ListView ItemsSource="{Binding Items}" HorizontalAlignment="Left" Height="310" Margin="11,89,0,0" VerticalAlignment="Top" Width="676"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Adresse" DisplayMemberBinding="{Binding address}"/> 
     </GridView> 
    </ListView.View> 
</ListView> 
+0

인 아레스 데이터가 다시 xl이지만 xaml에서 Binding 만 사용하면 NullReferenceException이 발생합니다. 프로그램은 선택할 변수를 알고 있습니다 – Raizzen

+0

제 편집 참조 .... – mm8

+0

이제는 효과가 있습니다. 난 그냥 내 gui에서 잘못된 출력을 얻을 수 있지만 내가 직접 해결할 수있을 것 같아요. 나는 아직도 성가신 uiam을 위해 슬픈 일을한다. ( – Raizzen