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();
}
}