首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SelectionChanged上更新ListPicker

在SelectionChanged上更新ListPicker
EN

Stack Overflow用户
提问于 2011-03-29 07:04:33
回答 1查看 1.3K关注 0票数 1

我有两个列表选择器。当第一个列表选择器的选择发生变化时,它应该过滤第二个列表选择器的数据。Second ListPicker xaml是这样的

代码语言:javascript
复制
 <TextBlock HorizontalAlignment="Left" Style="{StaticResource PhoneTextNormalStyle}" TextWrapping="Wrap" Text="text" VerticalAlignment="Bottom"/>
                <toolkit:ListPicker VerticalAlignment="Bottom" Name="CategoryList" ItemsSource="{Binding TransactionCategories, Mode=TwoWay}" SelectedItem="{Binding SelectedTransactionCategory, Mode=TwoWay}">
                <toolkit:ListPicker.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Rectangle Fill="Red" Width="24" Height="24"/>
                            <TextBlock Text="{Binding CategoryName,Mode=TwoWay}" Margin="12 0 0 0"/>
                        </StackPanel>
                    </DataTemplate>
                </toolkit:ListPicker.ItemTemplate>
                <toolkit:ListPicker.FullModeItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" Margin="16 21 0 20">
                            <Rectangle Width="43" Height="43"/>
                            <TextBlock Text="{Binding CategoryName, Mode=TwoWay}" Margin="16 0 0 0" FontSize="43" FontFamily="{StaticResource PhoneFontFamilyLight}" TextWrapping="Wrap"/>
                        </StackPanel>
                    </DataTemplate>
                </toolkit:ListPicker.FullModeItemTemplate>
            </toolkit:ListPicker>

第一个选取器触发事件GroupCategoryList_SelectionChanged

代码语言:javascript
复制
 private void GroupCategoryList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var category = (TransactionGroupCategory) GroupCategoryList.SelectedItem;
        ((TransactionEditViewModel)DataContext).FilterCategoryByGroup(category.GroupCategoryId);
    }

这是ViewModel中的一种方法

代码语言:javascript
复制
 public  void FilterCategoryByGroup(int groupCategoryId)
    {

        TransactionCategories = ToObservableCollection(DatabaseBl.GetData<TransactionCategory>().Where(x => x.GroupCategoryId == groupCategoryId).OrderByDescending(tc => tc.TransactionCount));
        if (TransactionCategories.Count > 0)
            SelectedTransactionCategory = TransactionCategories[0];
    }

第二个列表选择器在UI中永远不会刷新,即使通过filter方法获取了新数据。这会有什么问题呢。也许是绑定问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-29 07:30:39

如果不查看视图模型代码的其余部分,这里通常会怀疑您正在替换视图模型上的observable集合,而不是修改它。除非您的视图模型在设置TransactionCategories时触发了NotifyPropertyChanged事件,否则视图将不会知道这些更改。

更好的方法不是替换整个集合,而是修改它,可能调用Clear和Add来重新填充集合。然后,集合将激发视图将注意到的集合更改事件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5466064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档