I need to create a reorderable ListView in a Windows Phone 8.1 app created using WinRT. The XAML is the following (it binds to an ObservableDictionary in the codebehind):
<Grid Margin="24">
<ListView x:Name="MainListView" CanDragItems="True" CanReorderItems="True" AllowDrop="True" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
<ListView.ItemTemplate>
<DataTemplate>
<Border Padding="24" Margin="16" Background="CadetBlue">
<TextBlock Text="{Binding}" />
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
The ListView does nothing when I try to reorder the items (it looks like the "reordering mode" is not activated).
When I run this sample in Windows 8.1 (the XAML is shared) it works as expected. According to the documentation Windows Phone 8.1 should be supported.
Is this functionality supported on the phone (and the documentation wrong) or do I need to do something special for the phone?
For WP you need to set ListViewBase.ReorderMode
This is what works for me - no idea which properties are really necessary; ReorderMode is set in code behind:
<ListView x:Name="fooListView"
ItemsSource="{Binding barlist, Mode=OneWay}"
SelectionMode="None"
AllowDrop="True" CanDragItems="True" IsSwipeEnabled="True" />
The ListViewBase.Reorder property is available only for Windows Phone, so if you have the XAML in a Shared part of a universal app, you need to set it using conditional compile like so:
#if WINDOWS_PHONE_APP
MainListView.ReorderMode = ListViewReorderMode.Enabled;
#endif
It appears that the property CanReorderItems
is not supported on Windows Phone 8.1.
(I tried a simple example, and it does not work, and I could not find any combination that made it work as it does on Windows 8.1.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With