Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows Phone 7.1:如何从LongListSelector控件添加和删除项目?_C#_Silverlight_Windows Phone 7_Windows Phone - Fatal编程技术网

C# Windows Phone 7.1:如何从LongListSelector控件添加和删除项目?

C# Windows Phone 7.1:如何从LongListSelector控件添加和删除项目?,c#,silverlight,windows-phone-7,windows-phone,C#,Silverlight,Windows Phone 7,Windows Phone,Windows Phone 7.1:如何从LongListSelector控件添加/删除项目 我正在使用“Windows Phone Toolkit”中的LongListSelector控件。控件是绑定到从ObservableCollection继承的ViewModel的数据。当我尝试以下代码时: MyObject mo = new MyObject("Name", "Description", "Value"); App.MyObjectsViewModel.Add(mo); ViewMod

Windows Phone 7.1:如何从LongListSelector控件添加/删除项目

我正在使用“Windows Phone Toolkit”中的LongListSelector控件。控件是绑定到从ObservableCollection继承的ViewModel的数据。当我尝试以下代码时:

MyObject mo = new MyObject("Name", "Description", "Value");
App.MyObjectsViewModel.Add(mo);
ViewModel似乎已更新,但LongListSelector未更新?我错过了什么

PS:我是Silverlight和WP7开发的新手

遵循LongListSelector和DataTemplates的XAML。这段代码几乎是直接从WindowsPhoneToolkit示例中提取的,删除了一些与格式相关的代码,以保持文章的小型化

<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>
用于设置ItemSource的C代码隐藏

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而不是ObservableCollection。LINQ to对象不支持通过ObservableCollection自动更新。毕竟,它只返回向前的IEnumerable,而不是任何类型的集合


将ViewModel更改为实际公开一个ObservableCollection,并将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);
  }
}

将MyObjectsByClass绑定到XAML中的LongListSelector.ItemsSource,并确保使用INotifyPropertyChanged通知LongListSelector对属性的更改。

MyObjectsViewModel是否为ObservableCollection?是的,它是XAML后显示绑定的“ObservableCollection”,如果您在分组模式下使用LongListSelector,请发布代码以显示分组数据结构的创建方式。更新了帖子以显示XAML绑定和隐藏的代码。我尝试了类似的操作,但没有成功-没有更改LongListSelector视图。现在可以正常工作。我刚刚添加了另一行代码,以显式地将LongListSelector.ItemSource绑定到代码隐藏中的MyObjectsByClass。可能不是最优雅的解决方案,但它正在发挥作用。谢谢,谢谢!您能帮我提供一个示例代码来实现您推荐的功能吗。我试过。。。无法使其工作。@bharath-我需要查看ViewModel的简化版本才能编写示例。请记住,如果您计划在组首次创建后向组中添加其他项,则PublicGrouping将需要扩展ObservableCollection。我可以让它正常工作-现在它将满足我的目的。然而,您的回答有助于更好地理解LongListControl行为。非常感谢。我在windowsphonegeek.com上也找到了这样的网站,可以帮助其他有类似要求的人: