2011-03-28 69 views
1

我有兩個列表選取器。當第一個列表選擇器改變了選擇時,它應該過濾第二個列表選擇器的數據。 二ListPicker XAML是這樣在SelectionChanged上更新ListPicker

<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); 
    } 

這是在視圖模型

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從來沒有得到刷新,即使新數據是通過過濾方法獲取的。這可能是錯誤的。綁定問題可能?

回答

3

沒有查看視圖模型代碼的其餘部分,這裏通常會懷疑您正在替換視圖模型上的可觀察集合而不是修改它。除非您的視圖模型在設置TransactionCategories時觸發NotifyPropertyChanged事件,否則視圖將不知道這些更改。

更好的方法IMO不是要取代整個集合,而是修改它,可能調用Clear和Add來重新填充集合。然後集合將觸發視圖將注意到的Collection Changed事件。

+0

我在視圖模型上的其他屬性設置爲NotifyPropertyChanged。我希望我不需要使用Observable集合那樣做。將盡力去做。 – nemke 2011-03-28 23:40:11

+0

如果您只修改集合而不是替換集合,則不需要。一個可以真正絆倒人的小差異。 – 2011-03-28 23:44:11

+0

那麼,我修改了實現NotifyPropertyChanged(「TransactionCategories」)的屬性public ObservableCollection TransactionCategories,它的工作原理:)感謝您的提示。 – nemke 2011-03-28 23:46:36