2014-03-04 58 views
1

我正在創建使用諾基亞Mix Radio SDK的Windows Phone 8應用程序。我有Listbox包含流派。 ListBox中的每個項目(流派)都有CheckBox,因此用戶只能選擇他想要收聽的項目。我如何知道用戶選擇了哪些流派?從列表框中獲取所選項目

這是我的XAML:

<phone:PhoneApplicationPage 
x:Class="MusicApp.GenrePage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
FontFamily="{StaticResource PhoneFontFamilyNormal}" 
FontSize="{StaticResource PhoneFontSizeNormal}" 
Foreground="{StaticResource PhoneForegroundBrush}" 
SupportedOrientations="Portrait" Orientation="Portrait" 
mc:Ignorable="d" 
shell:SystemTray.IsVisible="True"> 

<!--LayoutRoot is the root grid where all page content is placed--> 
<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <!--TitlePanel contains the name of the application and page title--> 
    <StackPanel Grid.Row="0" Margin="12,17,0,28"> 
     <TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/> 
     <TextBlock Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 
    </StackPanel> 

    <!--ContentPanel - place additional content here--> 
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <ListBox x:Name="GenresListBox" Grid.Row="0" > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox Content="{Binding Name}" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
     <Button Grid.Row="1" Content="Button" HorizontalAlignment="Left" Name="SelectButton" VerticalAlignment="Top" Click="SelectButton_Click"/> 

    </Grid> 

</Grid> 

這裏是我的代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Navigation; 
using Microsoft.Phone.Controls; 
using Microsoft.Phone.Shell; 

namespace MusicApp 
{ 
    public partial class GenrePage : PhoneApplicationPage 
    { 
     public GenrePage() 
     { 
      InitializeComponent(); 


     } 

     private async void GetGenres() 
     { 
      var genres = await App.GetClient().GetGenresAsync(); 


      GenresListBox.ItemsSource = genres; 

      if (genres.Result == null || genres.Count == 0) 
      { 
       MessageBox.Show("No results available"); 
      } 

     } 

     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      base.OnNavigatedTo(e); 

      GetGenres(); 
     } 

     private void SelectButton_Click(object sender, RoutedEventArgs e) 
     { 
      var selectedGenres = GenresListBox.SelectedItems; 


     } 
    } 
} 
+0

綁定器isChecked到模型中的一個屬性,之後您可以通過列表迭代,看看哪一個被選中。看看這個http://stackoverflow.com/a/22137726/1664356 –

回答

1

我使用Windows Phone Toolkit's LongListMultiSelector解決我的問題。

這是怎麼回事的樣子: enter image description here

現在我的XAML是:

<phone:PhoneApplicationPage 
x:Class="MusicApp.GenrePage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" 
FontFamily="{StaticResource PhoneFontFamilyNormal}" 
FontSize="{StaticResource PhoneFontSizeNormal}" 
Foreground="{StaticResource PhoneForegroundBrush}" 
SupportedOrientations="Portrait" Orientation="Portrait" 
mc:Ignorable="d" 
shell:SystemTray.IsVisible="True"> 

<!--LayoutRoot is the root grid where all page content is placed--> 
<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <!--TitlePanel contains the name of the application and page title--> 
    <StackPanel Grid.Row="0" Margin="12,17,0,28"> 
     <TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/> 
     <TextBlock Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 
    </StackPanel> 

    <!--ContentPanel - place additional content here--> 
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <toolkit:LongListMultiSelector x:Name="GenresListBox" Grid.Row="0" > 
      <toolkit:LongListMultiSelector.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Name}" /> 
       </DataTemplate> 
      </toolkit:LongListMultiSelector.ItemTemplate> 
     </toolkit:LongListMultiSelector> 
     <Button Grid.Row="1" Content="Button" HorizontalAlignment="Left" Name="SelectButton" VerticalAlignment="Top" Click="SelectButton_Click"/> 

    </Grid> 

</Grid> 

和代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Navigation; 
using Microsoft.Phone.Controls; 
using Microsoft.Phone.Shell; 
using Nokia.Music.Types; 

namespace MusicApp 
{ 
    public partial class GenrePage : PhoneApplicationPage 
    { 
     public GenrePage() 
     { 
      InitializeComponent(); 


     } 

     private async void GetGenres() 
     { 
      var genres = await App.GetClient().GetGenresAsync(); 


      GenresListBox.ItemsSource = genres; 

      if (genres.Result == null || genres.Count == 0) 
      { 
       MessageBox.Show("No results available"); 
      } 

     } 

     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      base.OnNavigatedTo(e); 

      GetGenres(); 
     } 

     private void SelectButton_Click(object sender, RoutedEventArgs e) 
     { 
      var genres = GenresListBox.SelectedItems; 

     } 
    } 
} 
1

我做一點變化你的代碼。試試這個它幫助你 XAML

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
    <ListBox x:Name="GenresListBox" Grid.Row="0" SelectionChanged ="GenresListBox_SelectionChanged"> 
     <ListBox.ItemTemplate> 
     <DataTemplate> 
      <CheckBox Content="{Binding Name}" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
</ListBox> 
<Button Grid.Row="1" Content="Button" HorizontalAlignment="Left" Name="SelectButton" VerticalAlignment="Top" Click="SelectButton_Click"/>  
</Grid> 

代碼Beind

private void GenresListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
if (GenresListBox.SelectedIndex == -1) 
     return; 
} 

private void SelectButton_Click(object sender, RoutedEventArgs e) 
     { 
      var selectedGenres = GenresListBox.SelectedItem; 
     } 
相關問題