![](/img/trans.png)
[英]How to add items dynamically to LongListSelector Windows Phone 8
[英]Windows Phone 7.1: How to add & delete items from LongListSelector control?
Windows Phone 7.1:如何從LongListSelector控件添加/刪除項目?
我正在使用“ Windows Phone工具包”中的LongListSelector控件。 控件是綁定到從ObservableCollection繼承的ViewModel的數據。 當我嘗試以下代碼時:
MyObject mo = new MyObject("Name", "Description", "Value");
App.MyObjectsViewModel.Add(mo);
ViewModel似乎已更新,但LongListSelector沒有更新? 我想念什么?
PS:我是Silverlight和WP7開發的新手。
遵循XAML的LongListSelector和DataTemplates。 該代碼幾乎完全來自Windows Phone Toolkit示例(刪除了一些與格式相關的代碼,以使篇幅縮小)
<DataTemplate x:Key="groupHeader">
<TextBlock Text="{Binding Key}"/>
</DataTemplate>
<DataTemplate x:Key="groupItemHeader">
<Border>
<TextBlock Text="{Binding Key}"
Foreground="#FFFFFF"
FontSize="{StaticResource PhoneFontSizeLarge}"/>
</Border>
</DataTemplate>
<DataTemplate x:Key="myobjectItemTemplate">
<Grid>
<StackPanel VerticalAlignment="Top" Orientation="Vertical">
<TextBlock Text="{Binding Symbol}"/>
<TextBlock Text="{Binding Value}"/>
<TextBlock Text="{Binding Description}" TextWrapping="Wrap"/>
</StackPanel>
</Grid>
</DataTemplate>
<controls:PivotItem Header="myobjects">
<toolkit:LongListSelector x:Name="myobjectsList"
Background="Transparent"
GroupHeaderTemplate="{StaticResource groupHeader}"
GroupItemTemplate="{StaticResource groupItemHeader}"
ItemTemplate="{StaticResource myobjectItemTemplate}"
GroupViewOpened="LongListSelector_GroupViewOpened"
GroupViewClosing="LongListSelector_GroupViewClosing"/>
</controls:PivotItem>
后面的C#代碼用於設置ItemSource
var myobjectsByClassification = from myobjects in App.MyObjectsLibrary
group myobjects by myobjects.Classification into c
orderby c.Key
select new PublicGrouping<string, MyObject>(c);
this.myobjectsList.ItemsSource = myobjectsByClassification;
通過使用LINQ,您實際分配給ItemsSource
的對象是IEnumerable<T>
而不是ObservableCollection<T>
。 LINQ到對象不支持通過ObservableCollection
自動更新。 畢竟,它返回僅向前的IEnumerable<T>
而不是任何類型的集合。
更改您的ViewModel以實際公開ObservableCollection<PublicGrouping<string, MyObject>>
並將您的ItemsSource
直接綁定到該對象。
我的猜測是,分組代碼僅在后面的代碼中的某個地方被調用一次。 因此,當您向ViewModel集合中添加內容時,分組的集合不會更新。 處理此問題的最簡單方法(但可能不是最優雅的方法)是為ViewModel集合創建自己的AddItem()
方法。
class MyViewModelObject
{
void AddItem( MyObject obj )
{
App.MyObjectsLibrary.Add( obj );
MyObjectsByClassification = from myobjects in App.MyObjectsLibrary
group myobjects by myobjects.Classification into c
orderby c.Key
select new PublicGrouping<string, MyObject>(c);
}
}
將MyObjectsByClassification
綁定到XAML中的LongListSelector.ItemsSource
,並確保使用INotifyPropertyChanged
通知LongListSelector對屬性的更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.