2

需要一些帮助,当我单击 tap_event 时,我收到一个消息框删除或取消,该消息框有效,价格从总价中扣除,但之后它没有更新购物车,它在“ListBoxCart.Items.Remove(curr) 上崩溃, 提前致谢!

    private void listBoxCart_Tap(object sender, GestureEventArgs e)
    {
        if (MessageBox.Show("Are you sure!", "Delete", MessageBoxButton.OKCancel)
            == MessageBoxResult.OK)
        {

            foreach (Dvd curr in thisapp.ShoppingCart)
            {
                if (curr.Equals(listBoxCart.SelectedItem))
                {
                    listBoxCart.Items.Remove(curr);
                    listBoxCart.SelectedIndex = -1;
                    total -= Convert.ToDecimal(curr.price);

                    NavigationService.Navigate(new Uri("/ShoppingCart.xaml", UriKind.RelativeOrAbsolute));
                }


            }
            txtBoxTotal.Text = total.ToString();
            listBoxCart.ItemsSource = thisapp.ShoppingCart;
        }
        else
        {
            NavigationService.Navigate(new Uri("/ShoppingCart.xaml", UriKind.RelativeOrAbsolute));
        }


    }
4

2 回答 2

0

当您ItemsSource为 ListBox 设置属性时,它会生成一个read-only集合并显示它们。您要做的是访问此只读集合并对其进行修改,但由于它是只读的,因此您不能这样做。

相反,您可以让您的集合实现INotifyCollectionChanged接口并在用户删除项目时引发集合更改事件,或者使用ObservableCollection来存储您的项目。ObservableCollection为您实现INotifyCollectionChanged接口,以便您可以从中删除项目ObservableCollection并且更改将自动反映在列表框中。

ObservableCollection 也实现INotifyPropertyChanged,因此任何属性更新也将在 ListBox 中更新。

于 2013-04-04T16:10:45.713 回答
0

我写了一篇文章(抱歉是法语,但你可以阅读 XAML):http ://www.peug.ne​​t/2012/05/17/contextmenu-dans-listbox-datatemplate/

并在代码隐藏中:一个例子:

    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        var menuItem = sender as MenuItem;
        var fe = VisualTreeHelper.GetParent(menuItem) as FrameworkElement;
        Dvd _fig = fe.DataContext as Dvd;
        thisapp.ShoppingCart.Remove(_fig);

        reloading();
    }
于 2013-04-21T09:57:47.150 回答