Я пытаюсь реализовать LongListSelector в новом приложении WP7. LongListSelector существует в UserControl, связанном с моделью представления MVVMLight. Я получаю следующую ошибку при попытке загрузить UserControl:
System.ArgumentException не обработан
Сообщение = Параметр неверен.
Трассировки стека:
в MS.Internal.XcpImports.CheckHResult (UInt32 ч)
в MS.Internal.XcpImports.SetValue (INativeCoreTypeWrapper obj, свойство DependencyProperty, Double d)
в System.Windows.DependencyObject.SetValue (свойство DependencyProperty, Double d)
в System.Windows.FrameworkElement.set_Width (двойное значение)
в Microsoft.Phone.Controls.LongListSelector.GetAndAddElementFor (кортеж ItemTuple)
в Microsoft.Phone.Controls.LongListSelector.Balance ()
в Microsoft.Phone.Controls.LongListSelector.EnsureData ()
в Microsoft.Phone.Controls.LongListSelector.LongListSelector_Loaded (Отправитель объекта, RoutedEventArgs e)
в System.Windows.CoreInvokeHandler.InvokeEventHandler (Int32 typeIndex, делегат handlerDelegate, отправитель объекта, аргументы объекта)
в MS.Internal.JoltHelper.FireEvent (IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)
Мне удалось сузить проблему до элементов в моем источнике привязки, однако я не вижу, в чем проблема.
Вот XAML из моего UserControl:
<UserControl x:Class="BTT.PinPointTime.WinPhone.Views.TaskSelectionControl"
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
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"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
d:DesignHeight="480"
d:DesignWidth="480"
DataContext="{Binding Source={StaticResource Locator}, Path=TaskSelection}">
<UserControl.Resources>
<DataTemplate x:Key="itemTemplate">
<StackPanel Grid.Column="1"
VerticalAlignment="Top">
<TextBlock Text="{Binding Name}"
FontSize="26"
Margin="12,-12,12,6" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="groupHeaderTemplate">
<Border Background="YellowGreen"
Margin="6">
<TextBlock Text="{Binding Title}" />
</Border>
</DataTemplate>
<DataTemplate x:Key="groupItemTemplate">
<Border Background="Pink"
Margin="6">
<TextBlock Text="{Binding Title}" />
</Border>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}">
<Grid x:Name="ContentPanel"
Grid.Row="1"
Margin="12,0,12,0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<toolkit:LongListSelector Grid.Row="1"
Background="Red"
ItemsSource="{Binding GroupedTasks}"
GroupItemTemplate="{StaticResource groupItemTemplate}"
ItemTemplate="{StaticResource itemTemplate}"
GroupHeaderTemplate="{StaticResource groupHeaderTemplate}">
<toolkit:LongListSelector.GroupItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel />
</ItemsPanelTemplate>
</toolkit:LongListSelector.GroupItemsPanel>
</toolkit:LongListSelector>
</Grid>
</Grid>
А вот код, который я использую для заполнения свойства GroupedTasks в моей модели представления (оно объявлено как ObservableCollection> GroupedTasks):
private void LoadData()
{
if (App.Database.Query<Task, Guid>().Count() > 0)
{
GroupedTasks.Clear();
var tasks = (from t in App.Database.Query<Task, Guid>().ToList() select t.LazyValue.Value);
var groupedTasks = from t in tasks
group t by t.FullParentString into t1
orderby t1.Key
//select new Group<Task>(t1.Key, t1);
select new Group<Task>(t1.Key);
foreach (Group<Task> o in groupedTasks)
{
GroupedTasks.Add(o);
}
foreach (Group<Task> g in GroupedTasks)
{
var currentTasks = (from t in tasks where t.FullParentString == g.Title select t);
foreach (Task t in currentTasks)
{
g.Add(t);
}
}
}
_isDataLoaded = true;
}
и, наконец, вот объявление класса моей группы:
public class Group<T> : ObservableCollection<T>
{
public string Title
{
get;
set;
}
public bool HasItems
{
get
{
return Count != 0;
}
private set
{
}
}
public Group(string name)
{
this.Title = name;
}
}
Первоначально я реализовал это как простой IEnumerable согласно турориалу на Windows Phone Geek. Однако это дало мне точно такую же ошибку.
Я не получаю никаких ошибок привязки, однако я не вижу ничего, что позволило бы мне найти источник проблемы.