2011-05-03 103 views
0

我想弄清楚我需要更改以將此代碼綁定到列表視圖。WPF綁定列表視圖到ObservableCollection

XAML:

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Tracks" Height="350" Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="20" /> 
      <RowDefinition Height="26" /> 
      <RowDefinition Height="265*" /> 
     </Grid.RowDefinitions> 
     <Menu Name="Menu1" /> 
     <Frame Grid.Row="2" Name="Frame1" Source="PageSearchResults.xaml" /> 
     <StackPanel Orientation="Horizontal" Grid.Row="1"> 
     <Button Name="AddSite">+</Button> 
     <ListView Name="ListView1" MouseDoubleClick="ListViewItem_MouseDoubleClick"> 
      <ListView.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal" /> 
       </ItemsPanelTemplate> 
      </ListView.ItemsPanel> 
      <ListView.ContextMenu> 
       <ContextMenu> 
        <MenuItem Name="mnuDelete" Header="Delete" /> 
       </ContextMenu> 
      </ListView.ContextMenu> 
     </ListView> 
     </StackPanel> 
    </Grid> 
</Window> 

VB:

Class MainWindow 
    Dim bookmarks As New ArrayList 

    Private Sub mnuDelete_click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles mnuDelete.Click 
     If Not ListView1.SelectedValue Is Nothing Then 
      bookmarks.RemoveAt(ListView1.SelectedValue) 
     End If 
     ListView1.Items.RemoveAt(ListView1.SelectedIndex) 
    End Sub 

    Private Sub AddSite_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles AddSite.Click 
     Dim i As Integer = 0 
     Dim itmX As Integer 
     Dim itm As New ListViewItem 
     i = bookmarks.Add(Frame1.Content) 
     itmX = ListView1.Items.Add(New DictionaryEntry(i, Frame1.Content.title)) 
     ListView1.DisplayMemberPath = "Value" 
     ListView1.SelectedValuePath = "Key" 
    End Sub 

    Private Sub ListViewItem_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) 
     If Not ListView1.SelectedValue Is Nothing Then 
      Frame1.Content = bookmarks(ListView1.SelectedValue) 
     End If 
    End Sub 
End Class 

主要的一點是,我想在列表框項目橫着走了,八九不離十像一個圖標視圖,或者更具體地說是收藏書籤酒吧IE或Firefox。我需要學習如何使用綁定,這似乎是一個很好的開始。

下面是網頁存儲到新的ObservableCollection的變化:

Class MainWindow 
    Dim bookmarks As New System.Collections.ObjectModel.ObservableCollection(Of Bookmarks) 

    Private Sub mnuDelete_click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles mnuDelete.Click 
     If Not ListView1.SelectedValue Is Nothing Then 
      bookmarks.RemoveAt(ListView1.SelectedValue) 
     End If 
     ListView1.Items.RemoveAt(ListView1.SelectedIndex) 
    End Sub 

    Private Sub AddSite_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles AddSite.Click 
     Dim i As Integer = 0 
     bookmarks.Add(New Bookmarks(i, Frame1.Content.Title, Frame1.Content)) 
    End Sub 

    Private Sub ListViewItem_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) 
     If Not ListView1.SelectedValue Is Nothing Then 
      Frame1.Content = bookmarks(ListView1.SelectedValue) 
     Else 
      Frame1.Navigate(New PageCustomerHome()) 
     End If 
    End Sub 

    Private Sub mnuAdvancedSearch_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) 
     Frame1.Navigate(New PageAdvancedSearch()) 
    End Sub 

    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 
     ListView1.ItemsSource = bookmarks 
    End Sub 
End Class 

而且書籤類現在

Public Class Bookmarks 
    Public Sub New(ByVal key As Integer, ByVal title As String, ByVal page As Page) 
     Me._key = key 
     Me._title = title 
     Me._page = page 
    End Sub 

    Public Property Key() As Integer 
     Get 
      Return Me._key 
     End Get 
     Set(ByVal value As Integer) 
      Me._key = value 
     End Set 
    End Property 

    Public Property Title() As String 
     Get 
      Return Me._title 
     End Get 
     Set(ByVal value As String) 
      Me._title = value 
     End Set 
    End Property 

    Public Property Page() As Page 
     Get 
      Return Me._page 
     End Get 
     Set(ByVal value As Page) 
      Me._page = value 
     End Set 
    End Property 

    Private _key As Integer 
    Private _title As String 
    Private _page As Page 
End Class 

我只是不知道我需要做什麼來改變我的XAML綁定到我的數據。

回答

0

解決方案最終被設置一個ItemTemplate和執行綁定有:

<ListView.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Title}" Margin="3,0,3,0" /> 
    </DataTemplate> 
</ListView.ItemTemplate> 
0

你可以用的東西開始喜歡

<ListView.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="{Binding Title}" /> 
     </StackPanel> 
    </ItemsPanelTemplate> 
</ListView.ItemsPanel> 
+0

我真的不喜歡具有StackPanel的內部事情。一旦我粘貼該TextBlock在我結束了一個未處理的'System.Windows.Markup.XamlParseException: 增加值集合類型'System.Windows.Controls.UIElementCollection'拋出一個異常.'和'System.InvalidOperationException: 無法顯式修改用作ItemsControl的ItemsPanel的Panel的Children集合。 ItemsControl爲Panel.'生成子元素 – AndyD273 2011-05-04 18:08:00

相關問題