在ListView中获取选定项目的信息-WPF / C#

问题描述 投票:1回答:2

例如,我试图获取选定ListViewItem的信息,以将其放入几个文本框。我一直在寻找答案,但似乎没有任何帮助。我尝试了SelectedItem,SelectedSubItem。我只想获取该选定项目的信息,并在其他区域中将其显示为带有其他更多信息的信息:WPF:

<ListView Grid.Column="3" Height="650" Name="MealsList" ScrollViewer.CanContentScroll="False" >
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="*"/>
                                    <RowDefinition Height="*"/>
                                    <RowDefinition Height="*"/>
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <Ellipse Grid.RowSpan="3" Height="60" Width="60" HorizontalAlignment="Center" VerticalAlignment="Center">
                                    <Ellipse.Fill>
                                        <ImageBrush ImageSource="{Binding Path}"/>
                                    </Ellipse.Fill>
                                </Ellipse>
                                <TextBlock x:Name="FoodName" Grid.Column="1" Text="{Binding Name}" Margin="12,6,0,0"/>
                                <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding Calories , StringFormat=\{0\} kcal}" Margin="12,6,0,0"/>

                            </Grid>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>

C#

    public partial class Ernährungsplan : UserControl
    {
        public Ernährungsplan()
        {
            InitializeComponent();
            LoadDefault();
        }
        private void Breakfast()
        {
           // MealsList.Items.Clear();
            List<Meals> items = new List<Meals>
            {
                new Meals() { Name = "Dinkel-Apfel-Müsli-Joghurt", Calories = 270, Path = "/Images/dinkelapfelmueslijoghurtfruehstück.png" },
                new Meals() { Name = "Papaya mit körnigem Frischkäse", Calories = 220, Path = "/Images/papaya-mit-koernigem-frischkaese.png" },
                new Meals() { Name = "Vollkornbrot mit Quark, Bananenscheiben", Calories = 150, Path = "/Images/vollkornbrot-mit-quark-bananenscheiben.png" },
                new Meals() { Name = "Obstsalat", Calories = 270, Path = "/Images/obstsalat.png" },
                new Meals() { Name = "Beeren-Knusper-Quark", Calories = 220, Path = "/Images/beeren-knusper-quark.png" },
                new Meals() { Name = "Cloud-Eggs", Calories = 150, Path = "/Images/cloud-eggs.png" },
                new Meals() { Name = "Roggenbrötchen mit Käse, Radieschen und Sprossen", Calories = 270, Path = "/Images/roggenbroetchen-mit-kaese-radieschen-und-sprossen.png" },
                new Meals() { Name = "Joghurt mit Blaubeeren und Banane", Calories = 220, Path = "/Images/joghurt-mit-blaubeeren-pecannuessen-und-banane.png" },
                new Meals() { Name = "Rühreibagel mit Lachs", Calories = 150, Path = "/Images/ruehreibagel-mit-lachs.png" },
            };
            MealsList.ItemsSource = items;
        }

        private void Lunch()
        {
            //MealsList.Items.Clear();
            List<Meals> items = new List<Meals>
            {
                new Meals() { Name = "Schnitzel im Sauseschritt mit Spitzkohl-Slaw", Calories = 490, Path = "/Images/schnitzel-im-sauseschritt-mit-spitzkohl-slaw.png" },
                new Meals() { Name = "Pfanne mit Steak und Brokkoli", Calories = 350, Path = "/Images/Express-Pfanne-mit-Steak-und-Brokkoli.png" },
                new Meals() { Name = "Gemüsepfanne mit Lachs", Calories = 550, Path = "/Images/gemuesepfanne-mit-lachs.png" },
                new Meals() { Name = "Makkaroni Molto p(r)esto", Calories = 560, Path = "/Images/makkaroni-moltopresto.png" },
                new Meals() { Name = "Hähnchen mit Express-Bratreis", Calories = 670, Path = "/Images/haehnchen-mit-express-bratreis.png" },
                new Meals() { Name = "Farfalle mit Möhren-Hähnchen-Sugo", Calories = 760, Path = "/Images/farfalle-mit-moehren-haehnchen-sugo.png" },
                new Meals() { Name = "Putenbrust mit Mango, Kürbis und roten Linsen", Calories = 460, Path = "/Images/putenbrust-mit-mango-kuerbis-roten-linsen.png" },
                new Meals() { Name = "Reisnudeln mit Asia-Hackfleisch", Calories = 740, Path = "/Images/reisnudeln-mit-asia-hackfleisch.png" },
                new Meals() { Name = "Süss-Scharfe Reis-Bowl Hawaii", Calories = 560, Path = "/Images/suess-scharfe-reisbowl-hawaii.png" },
            };
            MealsList.ItemsSource = items;
        }

        private void Dinner()
        {
            //MealsList.Items.Clear();
            List<Meals> items = new List<Meals>
            {
                new Meals() { Name = "Gnocchi mit ­Spinat und Lachs", Calories = 540, Path = "/Images/gnocchi-mit-spinat-und-lachs.png", Carbs = 45, Fats = 30, Proteins = 18, Link = "https://www.lecker.de/ruck-zuck-gnocchi-mit-spinat-und-lachs-74105.html"},
                new Meals() { Name = "Thainudelsuppe mit Hähnchen", Calories = 440, Path = "/Images/thainudelsuppe-mit-haehnchen.png", Carbs = 37, Fats = 15, Proteins = 37, Link = "https://www.lecker.de/thainudelsuppe-mit-haehnchen-70443.html"},
                new Meals() { Name = "Fladenbrot-Gyrospizza", Calories = 670, Path = "/Images/fladenbrot-gyrospizza.png", Carbs = 60, Fats = 23, Proteins = 51, Link = "https://www.lecker.de/fladenbrot-gyrospizza-71701.html"},
                new Meals() { Name = "Omelett mit Lachs und Fenchelsalat", Calories = 560, Path = "/Images/ommm-omelett-mit-lachs-und-fenchelsalat.png", Carbs = 8, Fats = 44, Proteins = 28, Link = "https://www.lecker.de/ommm-omelett-mit-lachs-und-fenchelsalat-77612.html"},
                new Meals() { Name = "Geschnetzeltes mit Gnocchi und Pestorahm", Calories = 670, Path = "/Images/geschnetzeltzes-mit-gnocchi-und-pestorahm.png", Carbs = 52, Fats = 34, Proteins = 37, Link = "https://www.lecker.de/geschnetzeltes-mit-gnocchi-und-pestorahm-64982.html"},
                new Meals() { Name = "Penne mit Bratwurst-Bolo", Calories = 610, Path = "/Images/express-penne-mit-bratwurst-bolo.png", Carbs = 82, Fats = 19, Proteins = 23, Link = "https://www.lecker.de/express-penne-mit-bratwurst-bolo-8353.html"},
                new Meals() { Name = "Hähnchen-Gemüsepfanne", Calories = 340, Path = "/Images/haehnchen-gemuesepfanne.png", Carbs = 25, Fats = 14, Proteins = 26, Link = "https://www.lecker.de/haehnchen-gemuesepfanne-67018.html" },
                new Meals() { Name = "Feurige Garnelenpfanne", Calories = 190, Path = "/Images/feurige-garnelenpfanne.png", Carbs = 10, Fats = 7, Proteins = 22, Link = "https://www.lecker.de/feurige-garnelenpfanne-60571.html"},
                new Meals() { Name = "Putenpasta in Zitronencreme", Calories = 570, Path = "/Images/putenpasta-in-zitronencreme.png", Carbs = 43, Fats = 26, Proteins = 37, Link = "https://www.lecker.de/putenpasta-zitronencreme-74548.html"},
            };
            MealsList.ItemsSource = items;
        }

        public class Meals
        {
            public string Name { get; set; }

            public int Calories { get; set; }
            public int Carbs { get; set; }
            public int Fats { get; set; }
            public int Proteins { get; set; }

            public string Path { get; set; }
            public string Link { get; set; }
        }

        private void LoadDefault()
        {
            Breakfast();
            GridCursor.SetValue(Grid.ColumnProperty, 0);
        }

        private void MealsList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }
    }
c# wpf listview
2个回答
0
投票

由于列表视图的ItemsSource是Meals对象的列表,因此SelectedItem将为null或所选的Meals对象。

要在其他控件中显示所选对象的某些属性,可以使用

private void MealsList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var meal = (Meals)((ListView)sender).SelectedItem;
    if (meal != null
    { 
        MahlzeitInfoText.Text = meal.Name;
    }
    else
    {
        MahlzeitInfoText.Text = "";
    }
}

不要忘记将事件处理程序附加到SelectionChanged事件。

一种替代的且通常的首选方式是使用MVVM模式。


-1
投票

我相信您可以使用ListView的“ SelectionChanged”事件来运行循环以检查SelectedItem并复制其内容。

    private void MealsList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        foreach(Meals iMeal in MealsList.SelectedItems)
        {
                TextBox1.Text = iMeal.Name;
                TextBox2.Text = iMeal.Calories.ToString();
                TextBox3.Text = iMeal.Carbs.ToString();
                TextBox4.Text = iMeal.Fats.ToString();
                TextBox5.Text - iMeal.Proteins.ToString();
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.