0

果物アプリのリストボックスがあります。リストボックス内の各アイテムを選択すると、ユーザーに果物について詳しく説明する別のページに移動する必要があります。1 つのページに移動するためのコードは知っていますが、switch case ステートメントを使用して複数のページに移動するのに問題があります。コードは次のとおりです。

MainPage.xaml

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="10,10,14,-10">
<phone:LongListSelector HorizontalAlignment="Left" Height="432" VerticalAlignment="Top" Width="446" Margin="7,129,0,0"/>
        <ListBox Margin="0,-12,0,52" Name="FruitListbox" SelectionChanged="fruitList_SelectionChanged" SelectionMode="Extended" ItemsSource="{Binding}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Height="230">
                        <Image Name="Image" Width="100" Height="250" Source="{Binding Image}" VerticalAlignment="Top" Margin= "0,0,10,0"></Image>
                        <StackPanel x:Name="lBtn" Width="370" HorizontalAlignment="Left" Height="350">
                            <TextBlock Text="{Binding Name}" Foreground="Red"></TextBlock>
                            <TextBlock Text="{Binding Description}" Foreground="Aqua"></TextBlock>
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>

MainPage.xaml.cs

namespace Carifruits
{
 public partial class MainPage : PhoneApplicationPage
 {
    ObservableCollection<Fruit> fruitiness = new ObservableCollection<Fruit>();

public MainPage()
{

    InitializeComponent();
    Fruit fruit1 = new Fruit
    {
        Name = "Abricot",
        Description = "Classified with the Plum",
        Image = "http://img.xooimage.com/files68/5/1/1/abricot-gp14-1--30f6578.jpg",

    };
    Fruit fruit2 = new Fruit
    {
        Name = "Breadfruit",
        Description = "Species of flowering tree",
        Image = "http://nickandmiri.files.wordpress.com/2010/06/breadfruit2.jpg",



    };
    Fruit fruit3 = new Fruit
    {
        Name = "Coconut",
        Description = "Can refer to the entire Coconut Palm",
        Image = "http://www.internationalcoconut.com/coconuts.jpg",


    };
    Fruit fruit4 = new Fruit
    {
        Name = "Hog Plum",
        Description = "Yellowish plum, related to the Mango",
        Image = "http://streetsmartbrazil.com/userfiles/image/caj%C3%A1.jpg",


    };

    Fruit fruit5 = new Fruit
    {
        Name = "Padoo",
        Description = "Tree-growing bean pods ",
        Image = "http://caribfruits.cirad.fr/var/caribfruits/storage/images/fruits_des_antilles/pois_doux/2376-3-fre-FR/pois_doux.jpg",


    };

    fruitiness.Add(fruit1);
    fruitiness.Add(fruit2);
    fruitiness.Add(fruit3);
    fruitiness.Add(fruit4);
    fruitiness.Add(fruit5);

    LayoutRoot.DataContext = new CollectionViewSource { Source = fruitiness };

       }

public class Fruit
{

    public Fruit() { }

    public string Image { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }


}

private void fruitList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    {
        if (FruitListbox.SelectedIndex == -1) return;
        Fruit data = FruitListbox.SelectedItem as Fruit;

        switch (data.Description)
        {
            case "fruit1":
                NavigationService.Navigate(new Uri("/Pano.xaml?selectedItem=" + FruitListbox.SelectedIndex, UriKind.Relative));
                break;
            case "fruit2":
                NavigationService.Navigate(new Uri("/Pano2.xaml?selectedItem=" + FruitListbox.SelectedIndex, UriKind.Relative));
                break;
            case "fruit3":
                NavigationService.Navigate(new Uri("/Pano3.xaml?selectedItem=" + FruitListbox.SelectedIndex, UriKind.Relative));
                break;
            case "fruit4":
                NavigationService.Navigate(new Uri("/Pano4.xaml?selectedItem=" + FruitListbox.SelectedIndex, UriKind.Relative));
                break;
            case "fruit5":
                NavigationService.Navigate(new Uri("/Pano5.xaml?selectedItem=" + FruitListbox.SelectedIndex, UriKind.Relative));
                break;
            default:
                MessageBox.Show("Please Select From the list!");
                break;




        }


        FruitListbox.SelectedIndex = -1;
    }
}
}
}

誰か助けてくれませんか?

4

1 に答える 1

1

あなたの switch ステートメントは Fruit オブジェクトの説明を切り替えますが、大文字と小文字の比較値は ... 正確には何ですか? 変数名のようです。

一般に、列挙型または整数で切り替えることが推奨されます。

あなたの場合、果物の名前を切り替えるか、data.Name代わりに使用してみてください。

    switch (data.Description)
    {
        case "Abricot":
            ...
            break;
        case "Breadfruit":
            ...
            break;
        case "Coconut":
            ...
            break;
        case "Hog Plum":
            ...
            break;
        case "Padoo":
            ...
            break;
        default:
            MessageBox.Show("Please Select From the list!");
            break;
    }

ただし、より良い方法は、フルーツ リスト内のフルーツ アイテムのインデックスを使用することです。

    switch (fruitiness.IndexOf(data))
    {
        case 0:
            ...
            break;
        case 1:
            ...
            break;
        case 2:
            ...
            break;
        case 3:
            ...
            break;
        case 4:
            ...
            break;
        default:
            MessageBox.Show("Please Select From the list!");
            break;
    }

もちろん、それ以外にも良い方法があります。スイッチの使用を完全に避けることができます。

 var navigateUrlIndex = fruitiness.IndexOf(data) + 1;
 var navigateUrl = String.Format("/Pano{0}.xaml?selectedItem={1}", navigateUrlIndex != 1 ? "" : navigateUrlIndex, FruitListbox.SelectedIndex);

 if (FruitListbox.SelectedIndex != -1) {
     NavigationService.Navigate(new Uri(navigateUrl, UriKind.Relative));
 }

そのような何かがあなたを正しい方向に向けるはずです。(未検証)

于 2013-10-10T18:40:26.473 に答える