Это для VB.NET и XAML для UWP.Я использую ListView, MyList с DataTemplate:
<ListView x:Name="MyList">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="{Binding button1.Content}"></Button>
<TextBlock Text="{Binding col2}"></TextBlock>
<Border Child="{Binding button2}"></Border>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
И у меня есть: DataList As New cObservableListBase(Of Item)
и
Public Class Item
'List Properties
Public Property button1 As CustomButton
Public Property col2 As String
Public Property button2 As CustomButton
End Class
Public Class CustomButton
Inherits Button
Implements IComparable
Public Function CompareTo(obj As Object) As Integer Implements IComparable.CompareTo
CompareTo = 0
If Content > CType(obj, CustomButton).Content Then
CompareTo = 1
ElseIf Content < CType(obj, CustomButton).Content Then
CompareTo = -1
End If
End Function
End Class
И
MyList.ItemsSource = DataList
For i = 65 To 85
Dim b1 As New CustomButton With {.Content = Convert.ToChar(i)}
Dim b2 As New CustomButton With {.Content = Convert.ToChar(i)}
DataList.Add(New Item With {.button1 = b1, .col2 = Convert.ToChar(i), .button2 = b2})
Next
ListView содержит3 столбца, и когда я упорядочиваю DataList для любого из столбцов, первые 2 столбца, которые были связаны с текстом, будут упорядочены правильно, но 3-й столбец, который был связан с самим элементом управления, покажет другой результат.Примечание: что сам DataList правильно упорядочивает 3 столбца, но проблема в представлении списка не отображает 3-й столбец должным образом.
Я что-то здесь не так делаю или это ошибка?и как правильно привязать к элементу управления?
Редактировать:
Я чувствовал, что должен добавить небольшую программу, чтобы облегчить любой желающий попробовать.
<StackPanel Orientation="Vertical">
<Button Name="ADD" Content="Add" Click="AddClick" />
<Button Name="Order" Content="Order" Click="OrderClick"/>
<ListView x:Name="MyList">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="{Binding button1.Content}"></Button>
<TextBlock Text="{Binding col2}"></TextBlock>
<Border Child="{Binding button2}"></Border>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
и в следующем коде:
Public NotInheritable Class MainPage
Inherits Page
Public DataList As New ObservableCollection(Of Item)
Public Sub AddClick()
MyList.ItemsSource = DataList
For i = 65 To 85
Dim b1 As New CustomButton With {.Content = Convert.ToChar(i)}
Dim b2 As New CustomButton With {.Content = Convert.ToChar(i)}
DataList.Add(New Item With {.button1 = b1, .col2 = Convert.ToChar(i), .button2 = b2})
Next
End Sub
Public Sub OrderClick()
Static NextOrder As Boolean = False
Dim Sorted As IOrderedEnumerable(Of Item)
If NextOrder Then
Sorted = DataList.OrderBy(Function(p) p.col2)
Else
Sorted = DataList.OrderByDescending(Function(p) p.col2)
End If
NextOrder = Not NextOrder
Dim SortedList = Sorted.ToList
DataList.Clear()
For i = 0 To SortedList.Count - 1
DataList.Add(SortedList(i))
Next
End Sub
End Class
Public Class Item
'List Properties
Public Property button1 As CustomButton
Public Property col2 As String
Public Property button2 As CustomButton 'or UIElement
End Class
Public Class CustomButton
Inherits Button
Implements IComparable
Public Function CompareTo(obj As Object) As Integer Implements IComparable.CompareTo
Return Content.ToString.CompareTo(CType(obj, CustomButton).Content.ToString)
End Function
End Class
Сначала добавьте список, а затем попробуйте упорядочить его с помощью кнопки заказа, и проблема в 3-м столбце не упорядочена должным образом.Но при перезаписи программы я обнаружил, что DataList имеет правильный порядок даже в третьем столбце, но проблема в Listview не показывает это правильно !!