ListBox WPF Multiselect不工作

时间:2017-08-08 12:36:50

标签: c# xml wpf listbox

我正在尝试从列表框中选择多个选项。我甚至尝试使用多选模式,但它不适用于此特定列表框但适用于其他列表框。 ListBox名称是listBox。我在OrderWindow类中动态地将数据添加到该列表中,并且我已经实现了selection_changed方法,但我无法选择多个项目,并且我还将列表绑定到此列表框。

以下是代码:

namespace ACW2
{
    /// <summary>
    /// Interaction logic for OrderWindow.xaml
    /// </summary>
    public partial class OrderWindow : Window
    {
        List<MenuClass> PizzaInStock = new List<MenuClass>();
        List<InvClass> inventory = MainWindow.ItemList;
        List<InvClass> pizzatoppings = new List<InvClass>();
        List<String> Mainlist = new List<String>();
        String addpizzas = "";
        double pizzaprice = 0;

        private void extratoppingslist(String name)
        {
            pizzatoppings = new List<InvClass>();
            var pizza = MainWindow.MenuList.FirstOrDefault(x => x.Name == name);
            List<Ingredient> originaltoppings = pizza.Ingredients;
            int originaltoppingsize = pizza.Ingredients.Count;
            if (originaltoppingsize >= 5)
            {
                return;
            }
            var allpizzatoppings = from a in inventory
                                   where a.Category == "pizza"
                                   select a;
            foreach (InvClass item in allpizzatoppings)
            {
                int exists = 0;
                if (originaltoppingsize == 5)
                {
                    break;
                }
                foreach(Ingredient ing in originaltoppings)
                {
                    if (item.Name.Equals(ing.Name))
                    {
                        exists = 1;
                        break;
                    }
                }
                if (exists == 0)
                {
                    pizzatoppings.Add(item);
                }
                ++originaltoppingsize;
            }
            listBox.ItemsSource = null;
            listBox.ItemsSource = pizzatoppings;
        }
        private void updatepizzaprice()
        {
            pizzaprice = 0;
            if (comboBox1.SelectedItem != null&& comboBox.SelectedItem != null)
            {

                String pizza = comboBox.SelectedItem.ToString();
                String size = comboBox1.SelectedItem.ToString();
                extratoppingslist(pizza);
                var iteminlists = MainWindow.MenuList.FirstOrDefault(x => (x.Name == pizza) && (x.Size == size));

                pizzaprice += (Convert.ToDouble(iteminlists.Price));
                List<Ingredient> list = iteminlists.Ingredients;
                if (checkBox.IsChecked == true)
                {
                    foreach(Ingredient iss in list)
                    {
                        Trace.WriteLine(iss.Name);
                    }
                    var item = list.FirstOrDefault(x => x.Name == " dough");
                    var ingr= inventory.FirstOrDefault(x => x.Name == " dough");
                    pizzaprice += ((Convert.ToDouble(item.Quantity) * 0.1))*ingr.Price;
                    var items = list.FirstOrDefault(x => x.Name == " mozzarella");
                    var ingrs = inventory.FirstOrDefault(x => x.Name == " mozzarella");
                    pizzaprice += ((Convert.ToDouble(items.Quantity) * 0.15)) * ingrs.Price;
                }
                    List<InvClass> toppings = listBox.SelectedItems.Cast<InvClass>().ToList();
                    foreach (InvClass top in toppings)
                    {
                        var item = inventory.FirstOrDefault(x => x.Name == top.Name);
                        Trace.WriteLine(top.Name);
                    if (iteminlists.Size == " regular")
                    {

                        pizzaprice += item.Price * 0.25;
                    }
                    else if (iteminlists.Size == " large")
                    {
                        pizzaprice += item.Price * 0.35;
                    }
                    else if (iteminlists.Size == " extra-large")
                    {
                        pizzaprice += item.Price * 0.75;
                    }
                }
                textBox.Text = "£ " + pizzaprice.ToString();
            }
        }



        private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            updatepizzaprice();
        }

        private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            updatepizzaprice();
        }

        private void checkBox_Checked(object sender, RoutedEventArgs e)
        {
            updatepizzaprice();
        }

        private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            updatepizzaprice();
        }

        private void checkBox_unchecked(object sender, RoutedEventArgs e)
        {
            updatepizzaprice();
        }

        private void checkbox1_unchecked(object sender, RoutedEventArgs e)
        {
            updateburgerprice();
        }

        private void checkbox2_unchecked(object sender, RoutedEventArgs e)
        {
            updateburgerprice();
        }
    }

    }

这是xml代码:

<Window x:Class="ACW2.OrderWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ACW2"
        mc:Ignorable="d"
        Title="OrderWindow" SizeToContent="WidthAndHeight">

    <StackPanel Orientation="Vertical">
        <Label x:Name="label10" Content="Create Order" HorizontalAlignment="Left" Margin="5" VerticalAlignment="Top" FontSize="24"/>
        <StackPanel Orientation="Horizontal" VerticalAlignment="Top">
            <StackPanel Orientation="Vertical" VerticalAlignment="Top">
                <Label x:Name="label4_Copy" Content="Order Summary" Margin="5" FontSize="16"/>
                <ListBox x:Name="listBox2" Height="160" Margin="5" MinWidth="180"/>
                <Button x:Name="button4" Content="Remove Item" Margin="5"  Width="75"/>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                    <Label x:Name="label13" Content="Ingredient Cost (£)" Margin="5" VerticalAlignment="Top"/>
                    <TextBox x:Name="textBox4" Height="24" Margin="5" TextWrapping="Wrap" Text="£" Width="80"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                    <Label x:Name="label12" Content="Net Profit (£)" Margin="5"/>
                    <TextBox x:Name="textBox5" Height="24" Margin="5" TextWrapping="Wrap" Text="£" Width="80"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                    <Label x:Name="label11" Content="Total Price(£)"  Margin="5"/>
                    <TextBox x:Name="textBox1" Height="24" Margin="5" TextWrapping="Wrap" Text="£" Width="80"/>
                </StackPanel>
                <Button x:Name="button3" Content="Complete Order" Margin="5"/>
            </StackPanel>
            <StackPanel Orientation="Vertical" VerticalAlignment="Top">
                <Label x:Name="label4" Content="1. Pizzas" Margin="5" FontSize="16"/>
                <Border BorderBrush="Gray" BorderThickness="1" Margin="5">
                    <StackPanel Orientation="Vertical">
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                            <Label x:Name="label1" Content="Pizza" Margin="5" />
                            <ComboBox x:Name="comboBox" Margin="5" Width="120" SelectionChanged="comboBox_SelectionChanged"/>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                            <Label x:Name="label" Content="Size" Margin="5"/>
                            <ComboBox x:Name="comboBox1" Margin="5" Width="120" SelectionChanged="comboBox1_SelectionChanged"/>
                        </StackPanel>
                        <CheckBox x:Name="checkBox" Content="Stuffed Crust" Margin="5" HorizontalAlignment="Center" Checked="checkBox_Checked" Unchecked="checkBox_unchecked"/>
                        <Label x:Name="label14" Content="Extra Toppings" Margin="5,5,5,0" HorizontalAlignment="Center"/>
                        <ListBox x:Name="listBox" Height="120" Margin="5,0,5,5" MinWidth="140" HorizontalAlignment="Center" SelectionChanged="listBox_SelectionChanged" SelectionMode="Multiple">
                            <ListBox.ItemTemplate>
                                <DataTemplate x:Name="Lists">
                                    <TextBlock>
                                        <Run Text="{Binding Name}"/>
                                        <Run Text=" , "/>
                                        <Run Text="{Binding Price}"/>
                                    </TextBlock>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                            <Label x:Name="label9" Content="Price (£)" Margin="5"/>
                            <TextBox x:Name="textBox" Height="24" Margin="5" TextWrapping="Wrap" Text="£" VerticalAlignment="Top" Width="80"/>
                        </StackPanel>
                        <Button x:Name="button" Content="Add to Order" Margin="5" Width="80" HorizontalAlignment="Right"/>
                    </StackPanel>
                </Border>
            </StackPanel>
            <StackPanel Orientation="Vertical" VerticalAlignment="Top">
                <Label x:Name="label5" Content="2. Burgers" Margin="5" FontSize="16"/>
                <Border BorderBrush="Gray" BorderThickness="1" Margin="5">
                    <StackPanel Orientation="Vertical">
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                            <Label x:Name="label2" Content="Burger" HorizontalAlignment="Left" Margin="5" VerticalAlignment="Top"/>
                            <ComboBox x:Name="comboBox2" HorizontalAlignment="Left" Margin="5" VerticalAlignment="Top" Width="107" SelectionChanged="comboBox2_SelectionChanged"/>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                            <Label x:Name="label3" Content="Size" Margin="5" VerticalAlignment="Center"/>
                            <RadioButton x:Name="radioButton" Content="1/4lb" HorizontalAlignment="Left" Margin="5" VerticalAlignment="Center" Checked="radioButton_Checked"/>
                            <RadioButton x:Name="radioButton1" Content="1/2lb" HorizontalAlignment="Left" Margin="5" VerticalAlignment="Center" Checked="radioButton1_Checked"/>
                        </StackPanel>
                        <StackPanel Orientation="Vertical" HorizontalAlignment="Center">
                            <CheckBox x:Name="checkBox1" Content="Salad"  Margin="2" Checked="checkBox1_Checked" Unchecked="checkbox1_unchecked"/>
                            <CheckBox x:Name="checkBox2" Content="Cheese" Margin="2" Checked="checkBox2_Checked" Unchecked="checkbox2_unchecked"/>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                            <Label x:Name="label8" Content="Price (£)" HorizontalAlignment="Left" Margin="5" />
                            <TextBox x:Name="textBox2" Height="24" Margin="5" TextWrapping="Wrap" Text="£" Width="80"/>
                        </StackPanel>
                        <Button x:Name="button1" Content="Add to Order" Margin="5" Width="80" HorizontalAlignment="Right" Click="button1_Click"/>
                    </StackPanel>
                </Border>
            </StackPanel>
            <StackPanel Orientation="Vertical" VerticalAlignment="Top">
                <Label x:Name="label6" Content="3. Sundries" Margin="5" FontSize="16"/>
                <Border BorderBrush="Gray" BorderThickness="1" Margin="5">
                    <StackPanel Orientation="Vertical">
                        <ListBox x:Name="listBox1" Height="120" MinWidth="140" Margin="5" SelectionChanged="listBox1_SelectionChanged">
                            <ListBox.ItemTemplate>
                                <DataTemplate x:Name="Lists11">
                                    <TextBlock Background="{Binding Color}">
                                        <Run Text="{Binding Name}"/>
                                    </TextBlock>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
                        <StackPanel Orientation="Horizontal">
                            <Label x:Name="label7" Content="Price (£)" Margin="5" VerticalAlignment="Top"/>
                            <TextBox x:Name="textBox3" Height="24" Margin="5" TextWrapping="Wrap" Text="£" Width="80"/>
                        </StackPanel>
                        <Button x:Name="button2" Content="Add to Order" HorizontalAlignment="Right" Margin="5" Width="80" Click="button2_Click"/>
                    </StackPanel>
                </Border>
            </StackPanel>
        </StackPanel>
    </StackPanel>
</Window>

0 个答案:

没有答案