WPF, привязывающий просмотр списка к коллекции ObservableCollection - PullRequest
0 голосов
/ 04 мая 2011

Я пытаюсь выяснить, что мне нужно изменить, чтобы привязать этот код к списку.

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 на Привязать к моим данным.

Ответы [ 2 ]

0 голосов
/ 06 мая 2011

В итоге мы решили установить ItemTemplate и выполнить связывание там:

<ListView.ItemTemplate>
    <DataTemplate>
       <TextBlock Text="{Binding Title}" Margin="3,0,3,0" />
    </DataTemplate>
</ListView.ItemTemplate>
0 голосов
/ 04 мая 2011

Вы можете начать с чего-то вроде

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