我正在使用XAML/C#中的Windows Phone 8.1應用程序。在Windows Phone 8.1應用程序中篩選列表視圖
我有一個列表視圖,其項目源設置爲CollectionViewSource
,名爲MusicSource
。在C#的後端,我有一個ObservableCollection
,調用source
,下面的代碼通過獲取手機上的所有音樂文件來填充它,按藝術家對它進行分組,然後將它們放入CollectionViewSource中,這會在列表視圖中顯示它們:
var folders = await folder.GetFoldersAsync();
if (folders != null)
foreach (var fol in folders)
await getMusic(fol);
var files = await folder.GetFilesAsync();
foreach (var file in files)
{
MusicProperties musicProperties = await file.Properties.GetMusicPropertiesAsync();
this.source.Add(new Music((musicProperties.Artist.Length > 0) ? musicProperties.Artist : "Custom", (musicProperties.Title.Length > 0) ? musicProperties.Title : file.Name, (musicProperties.Album.Length > 0) ? musicProperties.Album : "Custom Album", file.Path));
}
itemSource = AlphaKeyGroup<Music>.CreateGroups(source, CultureInfo.CurrentUICulture, s => s.Artist, true);
this.MusicSource.Source = itemSource;
下面是它的XAML的一面:
<Page.Resources>
<DataTemplate x:Key="GroupTemplate">
<Grid Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="1">
<TextBlock x:Name="SongTitle" Text="{Binding Title}"
Style="{ThemeResource ListViewItemTextBlockStyle}"/>
<TextBlock x:Name="ArtistName" Text="{Binding Album}"
Style="{ThemeResource ListViewItemContentTextBlockStyle}"/>
</StackPanel>
</Grid>
</DataTemplate>
<CollectionViewSource x:Name="MusicSource" IsSourceGrouped="true" />
<DataTemplate x:Key="headerTemplate">
<StackPanel HorizontalAlignment="Stretch" Width="{Binding ActualWidth, ElementName=contentList}">
<TextBlock Text="{Binding Key}" />
</StackPanel>
</DataTemplate>
</Page.Resources>
<Grid>
<SemanticZoom>
<SemanticZoom.ZoomedInView>
<ListView
x:Name="contentList"
SelectionMode="Multiple"
ItemsSource="{Binding Source={StaticResource MusicSource}}"
ItemTemplate="{StaticResource GroupTemplate}">
<ListView.GroupStyle>
<GroupStyle HidesIfEmpty="True" HeaderTemplate="{StaticResource headerTemplate}"/>
</ListView.GroupStyle>
</ListView>
</SemanticZoom.ZoomedInView>
</SemanticZoom>
<Border
x:Name="SearchBorder"
Background="White">
<TextBox
x:Name="Search" TextChanged="TextBox_TextChanged" />
</Border>
</Grid>
所以我得到的東西就像在ListView以下幾點:
邁克爾·傑克遜
- 壞
- 危險
- 驚悚
- 怪物
阿姆
- 不怕
- 怪物
當用戶鍵入搜索文本框時,應該過濾列表視圖並僅顯示與搜索文本框中的文本匹配的項目。因此,例如,如果我在搜索框中輸入「Monster」,則立即過濾列表視圖,並且只在「Michael Jackson」組頭中顯示「Monster」,在「Eminem」組頭中顯示「Monster」。
我該怎麼做到這一點?
東西沿着「itemSource = AlphaKeyGroup .CreateGroups(source,CultureInfo.CurrentUICulture,s => s.Artist,true).Where(s => s.Artist.Contains(」searchingtext「)|| s .Album.Contains(「searchingtext」); –
user3007447
2014-08-28 18:55:29
問題在於當你改變itemsource時,所有選定的項目都被取消選擇 – DemCodeLines 2014-08-28 19:53:10
嗯,我不完全確定你想達到什麼,所以我不知道爲什麼您可以在搜索框中輸入時選擇項目 但是,您可以有兩個列表框並將可見性綁定到屬性,如「bool isSearching」。如果isSearching == true,則隱藏listbox1並顯示listbox 2 不知道如何影響性能,但。 – user3007447 2014-08-29 06:16:42