在WP7中使用MVVM绑定itemssource的问题

时间:2012-04-02 09:06:40

标签: windows-phone-7 longlistselector

我正在使用MVVM模式,我正在尝试绑定

public ObservableCollection Friends property to LongListSelector

<toolkit:LongListSelector
            ItemsSource="{Binding Friends}"
            GroupHeaderTemplate="{StaticResource movieGroupHeader}"
            ListHeaderTemplate="{StaticResource movieListHeader}">
            <toolkit:LongListSelector.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="12,8,0,8">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>

                        <StackPanel Grid.Column="1" VerticalAlignment="Top">
                            <TextBlock Text="{Binding MyBoxName}" Style="{StaticResource PhoneTextLargeStyle}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" Margin="12,-12,12,6"/>
                            <TextBlock Text="{Binding MyBoxID}" Style="{StaticResource PhoneTextNormalStyle}" TextWrapping="Wrap" FontFamily="{StaticResource PhoneFontFamilySemiBold}"/>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="Status:" Style="{StaticResource PhoneTextSmallStyle}"/>
                                <TextBlock Text="{Binding Status}" Style="{StaticResource PhoneTextSmallStyle}" FontFamily="{StaticResource PhoneFontFamilySemiBold}"/>
                            </StackPanel>

                        </StackPanel>
                    </Grid>
                </DataTemplate>
            </toolkit:LongListSelector.ItemTemplate>
        </toolkit:LongListSelector>

Now issues is when i try to add

_friends.Add(new Model.Friends { MyBoxID = e.RosterItem.Jid, MyBoxName = e.RosterItem.Name, Status = Matrix.Xmpp.PresenceType.unavailable })

它给出 InvalidCastException 所以我尝试了List而不是ObservableCollection。现在我没有异常,但LLS中没有显示任何内容。如何使用分组将My ObservableCollection属性绑定到LLS。

1 个答案:

答案 0 :(得分:0)

对于LongListSelector,您不仅需要一个集合,还需要一些更复杂的结构来支持分组

看看LongListCollection。这是一个很棒的课程,可以帮助你

用法:

var list = new LongListCollection<Event, string>(Events, x => x.Date.ToLongDateString());