【问题标题】:Update ListPicker on SelectionChanged在 SelectionChanged 上更新 ListPicker
【发布时间】:2011-03-29 07:30:39
【问题描述】:

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

 <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

 private void GroupCategoryList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var category = (TransactionGroupCategory) GroupCategoryList.SelectedItem;
        ((TransactionEditViewModel)DataContext).FilterCategoryByGroup(category.GroupCategoryId);
    }

这是 ViewModel 中的一个方法

 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 方法获取的。这有什么问题。可能是绑定问题?

【问题讨论】:

    标签: silverlight windows-phone-7 silverlight-toolkit


    【解决方案1】:

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

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

    【讨论】:

    • 我在视图模型上的其他属性是用 NotifyPropertyChanged 设置的。我坚持认为我不需要使用 Observable 集合来做到这一点。会努力去做的。
    • 如果您只修改集合而不是替换集合,则不会。一个很小的差异,真的可以让人绊倒。
    • 好吧,我修改了实现 NotifyPropertyChanged("TransactionCategories") 的属性 public ObservableCollection TransactionCategories 并且它有效 :) 感谢您的提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 2013-05-18
    • 1970-01-01
    • 2013-04-20
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多