簡體   English   中英

Windows Phone 7.1:如何從LongListSelector控件添加和刪除項目?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM