ListView not updating when adding new items, but when removing

46 Views Asked by At

Okay guys, I'm pretty new to C# and struggling with UpdateSourceTriggers of ListViews. It's working when I'm deleting something, but it's not when I'm adding something new. And it's strange, because I can hover the ListView and see that something has been added, but it's not showing the name and the price.

This is my code:

<ListView x:Name="orders" 
          ItemsSource="{Binding SelectedOrderList, UpdateSourceTrigger=PropertyChanged}" 
          SelectedItem="{Binding SelectedMenuRemove}" 
          HorizontalAlignment="Right" 
          VerticalAlignment="Center" 
          Height="800" 
          Style="{StaticResource CustomListViewStyle}" >
  <ListView.View>
    <GridView>

<!--
It's working with this one
      <GridViewColumn Header="Name" 
                      DisplayMemberBinding="{Binding Id, UpdateSourceTrigger=PropertyChanged}" 
                      Width="400" />
      <GridViewColumn Header="Preis" 
                      DisplayMemberBinding="{Binding MenuId, UpdateSourceTrigger=PropertyChanged}" 
                      Width="80" />-->
<!--Not with this-->
      <GridViewColumn Header="Name" 
                      DisplayMemberBinding="{Binding Menu.Name, UpdateSourceTrigger=LostFocus}" 
                      Width="400" />
      <GridViewColumn Header="Preis" 
                      DisplayMemberBinding="{Binding Menu.Price, UpdateSourceTrigger=LostFocus}" 
                      Width="80" />
    </GridView>
  </ListView.View>
</ListView>
class OrderViewModel : ObservableObject
{
    public ObservableCollection<Menu> AllMenus { get; } = new ObservableCollection<Menu>();
    public ObservableCollection<Category> AllCategories { get; } =
        new ObservableCollection<Category>();
    public ObservableCollection<Order> AllOrders { get; } = new ObservableCollection<Order>();
    public ObservableCollection<Menu> TemporaryMenus { get; set; }
    private ObservableCollection<Order> _SelectedOrderList;
    public ObservableCollection<Order> SelectedOrderList
    {
        get { return _SelectedOrderList; }
        set
        {
            _SelectedOrderList = value;
            OnPropertyChanged(nameof(SelectedOrderList));
        }
    }
    private ObservableCollection<Menu> _FilteredMenus;
    public ObservableCollection<Menu> FilteredMenus
    {
        get { return _FilteredMenus; }
        set
        {
            _FilteredMenus = value;
            TemporaryMenus = new ObservableCollection<Menu>(
                AllMenus.Where(menu => menu.CategoryId.Equals(SelectedCategory.Id))
            );
            FilteredMenus.Clear();
            foreach (var menu in TemporaryMenus)
            {
                FilteredMenus.Add(menu);
            }
            OnPropertyChanged(nameof(FilteredMenus));
        }
    }
    private Category _SelectedCategory;
    public Category SelectedCategory
    {
        get { return _SelectedCategory; }
        set
        {
            _SelectedCategory = value;
            FilteredMenus = new ObservableCollection<Menu>();
        }
    }
    private Menu _SelectedMenuAdd;
    public Menu SelectedMenuAdd
    {
        get { return _SelectedMenuAdd; }
        set
        {
            _SelectedMenuAdd = value;
            if (SelectedMenuAdd != null)
            {
                Order newOrder = new Order
                {
                    MenuId = SelectedMenuAdd.Id,
                    TableId = Global.TableParameter,
                    WaiterId = 1,
                    Printstatus = 1,
                    Starttime = DateTime.Now
                };
                SelectedOrderList.Add(newOrder);
                using (var db = new BonGoContext())
                {
                    db.Add(newOrder);
                    db.SaveChanges();
                }
                SelectedMenuAdd = null;
            }
            OnPropertyChanged(nameof(SelectedMenuAdd));
            OnPropertyChanged(nameof(SelectedOrderList));
        }
    }
    private Order _SelectedMenuRemove;
    public Order SelectedMenuRemove
    {
        get { return _SelectedMenuRemove; }
        set
        {
            _SelectedMenuRemove = value;
            if (SelectedMenuRemove != null)
            {
                Order orderToRemove = SelectedOrderList.FirstOrDefault(
                    order => order.Id == SelectedMenuRemove.Id
                );
                if (orderToRemove != null)
                {
                    SelectedOrderList.Remove(orderToRemove);
                    using (var db = new BonGoContext())
                    {
                        db.Orders.Remove(orderToRemove);
                        db.SaveChanges();
                    }
                }
            }
            OnPropertyChanged(nameof(SelectedMenuRemove));
            OnPropertyChanged(nameof(SelectedOrderList));
        }
    }

    public OrderViewModel()
    {
        using (var db = new BonGoContext())
        {
            AllMenus = new ObservableCollection<Menu>(
                db.Menus.Select(
                    menu =>
                        new Menu
                        {
                            Id = menu.Id,
                            Name = menu.Name,
                            Price = Math.Round(menu.Price, 2),
                            CategoryId = menu.CategoryId
                        }
                )
            );
            AllCategories = new ObservableCollection<Category>(
                db.Categories.Select(
                    category => new Category { Id = category.Id, Name = category.Name }
                )
            );
            AllOrders = new ObservableCollection<Order>(
                db.Orders.Select(
                    order =>
                        new Order
                        {
                            Id = order.Id,
                            MenuId = order.MenuId,
                            Menu = order.Menu,
                            TableId = order.TableId,
                            WaiterId = order.WaiterId,
                            Printstatus = order.Printstatus,
                            Starttime = order.Starttime,
                            Endtime = order.Endtime,
                            Dailyclosing = order.Dailyclosing
                        }
                )
            );
        }
        SelectedOrderList = new ObservableCollection<Order>(
            AllOrders.Where(order => order.TableId == Global.TableParameter)
        );
        SelectedCategory = AllCategories.FirstOrDefault();
    }
}
0

There are 0 best solutions below