2017-05-20 3 views
0

Ich habe versucht, Beispielen und anderen Fragen zu folgen, aber ich kann nicht diese Listenansicht an eine ObservableCollection binden. Ich kann nicht herausfinden, was ich falsch mache. Würde mich freuen, wenn jemand meinen Fehler bitte aufzeigen könnte.VB.Net WPF-ListView-Bindung

MainWindow.xaml:

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:Duplicate_File_Finder" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ListView ItemsSource="{Binding Path=dFileList}"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="File Name" DisplayMemberBinding="{Binding Path=FileName}" /> 
        <GridViewColumn Header="Path" DisplayMemberBinding="{Binding Path=Path}" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 

    </Grid> 
</Window> 

MainWindow.xaml.vb:

Imports System.Collections.ObjectModel 

Public Class DuplicateFile 
    Public Sub New(ByVal FileName As String, ByVal Path As String, ByVal Hash As String, ByVal Icon As String) 
     Me.FileName = FileName 
     Me.Path = Path 
     Me.Hash = Hash 
     Me.Icon = Icon 
    End Sub 

    Public Property Icon As String 
    Public Property FileName As String 
    Public Property Path As String 
    Public Property Hash As String 
End Class 

Class MainWindow 

    Public dFileList As New ObservableCollection(Of DuplicateFile) 

    Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded 

     For i = 0 To 1 
      dFileList.Add(New DuplicateFile("File " + i.ToString, "C:\File " + i.ToString, i.ToString, i.ToString)) 
     Next 

    End Sub 
End Class 
+0

Wie stellen Sie Ihren 'DataContext' von' MainWindow' ein? Du könntest es 1 von 2 Möglichkeiten tun: 1) setze 'this.DataContext = this', oder 2) Setze und' x: Name' von deinem 'MainWindow' Element und verwende dann' ElementName = 'um es zu benutzen es als Kontext für Ihre Bindung. –

+0

Ich war nicht :) Aber ich habe "Me.DataContext = Me" zum MainWindow Loaded Event hinzugefügt und jetzt bekomme ich "BindingExpression path error: 'dFileList' Eigenschaft nicht gefunden auf 'Objekt' '' MainWindow '" – Daniel

+0

Sorry, ich steckte in C# lang mit dem "' this "Ding! (Ich meinte 'Ich'). Das liegt daran, dass "dFileList" ein Feld und keine Eigenschaft ist. Versuchen Sie, es auf eine Eigenschaft zu setzen (wie bei den Eigenschaften in der Klasse 'DuplicateFile') -' Öffentliche Eigenschaft dFileList als neue ObservableCollection ... '. –

Antwort

0

Zuerst müssen Sie sicherstellen, Ihre dFileList ist ein Eigenschaft, kein Feld, (die es ist derzeit):

Public Property dFileList As New ObservableCollection(Of DuplicateFile) 

Sie müssen auch Ihre Window was als DataContext zu verwenden.

Sie können dies in dem Unterprogramm InitializeComponent oder Loaded tun:

Me.DataContext = Me 

Oder in XAML, ein x:Name für die Window, wie x:Name="mainWindow" eingestellt.

Setzen Sie dann ListViewBinding, um auf das Element für den richtigen Kontext verweisen: ItemsSource="{Binding Path=dFileList, ElementName=mainWindow}".


Ihre Bindungen sollten dann perfekt funktionieren :)

Hoffnung, das hilft.