从绑定列表中删除数据C#

时间:2014-03-20 22:39:08

标签: c# wpf xaml listbox

我目前正在尝试从绑定列表中删除项目。

这是它在xaml中绑定的位置。

<ListBox Height="362" HorizontalAlignment="Left" Margin="6,245,0,0" Name="lstHoldCategories" VerticalAlignment="Top" Width="462" SelectionChanged="list_SelectionChanged_1" BorderThickness="0,0,0,0">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <!--This positions the Text eg name etc-->
            <StackPanel Orientation ="Vertical">
                <!--This changes the size of the photo on the left-->
                <Image Width="445" Height="300" HorizontalAlignment="Center" Stretch="UniformToFill" >
                    <Image.Source>
                        <BitmapImage UriSource="{Binding imgSource}"/>
                    </Image.Source>
                </Image>
                <TextBlock Text="{Binding Name}" Style="{StaticResource PhoneTextLargeStyle}" Width="1000"  />
                <TextBlock Text="{Binding Type}" Style="{StaticResource PhoneTextLargeStyle}" Width="1000"  />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

然后,我在一个单独的未绑定列表框中创建了一个单独的通用列表,以便我可以选择“类型”并加载该类型的所有动物。

以下是我设置未绑定列表的代码

public CategorySearch()
    {
        InitializeComponent();
        observablePets = new ObservableCollection<Shop>();
        temp = new ObservableCollection<Shop>();

        MyList.Add("Dog");
        MyList.Add("Cat");
        MyList.Add("Fish");
        MyList.Add("Lizard");

        lstCategory.ItemsSource = MyList;
    }

这就是我已经完成了未绑定列表框的SelectedIndex以添加所选“类型”的动物

private void lstCategory_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (lstCategory.SelectedIndex == 0)
        {
            foreach (Shop pet in thisApp.myshop)
            {
                if (pet.Type == "Dog")
                {
                    //lstHoldCategories.Items.Clear();
                    temp.Add(pet);                       
                    lstHoldCategories.ItemsSource = temp;
                }
            }
        }
        if (lstCategory.SelectedIndex == 1)
        {
            foreach (Shop pet in thisApp.myshop)
            {
                if (pet.Type == "Cat")
                {
                    //lstHoldCategories.Items.Clear();
                    temp.Add(pet);
                    lstHoldCategories.ItemsSource = temp;
                }
            }
        }
        if (lstCategory.SelectedIndex == 2)
        {
            foreach (Shop pet in thisApp.myshop)
            {
                if (pet.Type == "Fish")
                {
                    //lstHoldCategories.Items.Clear();
                    temp.Add(pet);
                    lstHoldCategories.ItemsSource = temp;
                }
            }
        }
        if (lstCategory.SelectedIndex == 3)
        {
            foreach (Shop pet in thisApp.myshop)
            {
                if (pet.Type == "Lizard")
                {
                    //lstHoldCategories.Items.Clear();
                    temp.Add(pet);
                    lstHoldCategories.ItemsSource = temp;
                }
            }
        }
    }

正如你在这段代码中看到的那样,我已经注释掉了我认为会清空selectedIndex上的listBox并使用新选择重新加载listBox的代码片段。不幸的是,当您选择索引时,它无法正常运行并崩溃应用程序。

如果有一种不同的方法来清空绑定的listBox,我会很感激有人建议我怎么做, 提前致谢, 杰森

////照片管理\\ 这是在选择索引之前页面的样子

enter image description here

这是选择索引时绑定listBox的样子

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要清除集合本身,而不是绑定到集合的对象。快速搜索出现了这个...... Delete all items from listobox
为了澄清,Items集合存在于ListBox上,该属性是readonly。因此,您需要从ListBox实际绑定的集合中删除项目 在添加新项目之前,您应该能够在temp上调用clear。但是您需要确保您的集合源实现INotifyCollectionChanged以查看UI中反映的更改。