I have 2 pages one is master other detail page.
detailpage.xaml
- <ContentPage.ToolbarItems>
- <ToolbarItem Icon="plus.png" Text="Add" Activated="OnAdd" Order="Primary"/>
- </ContentPage.ToolbarItems>
- <ListView x:Name="iList" ItemSelected="IList_ItemSelected" >
- <ListView.ItemTemplate>
- <DataTemplate>
- <TextCell Text="{Binding ExpenseCategory}" Detail="{Binding ExId}" >
- <TextCell.ContextActions>
- <MenuItem Text="Delete"
- IsDestructive="True"
- Clicked="MenuItem_Clicked"
- CommandParameter="{Binding .}" />
- </TextCell.ContextActions>
- </TextCell>
- </DataTemplate>
- </ListView.ItemTemplate>
- </ListView>
detailpage.xaml.cs
- public event EventHandler<Expense> ExpenseAdded;
- public event EventHandler<Expense> ExpenseUpdated;
- private SQLiteAsyncConnection _connection;
- public ExpenseDetail (Expense addexpense)
- {
- if (addexpense == null)
- throw new ArgumentNullException(nameof(addexpense));
- InitializeComponent();
- _connection = DependencyService.Get<ISQLiteDb>().GetConnection();
- BindingContext = new Expense
- {
- ExId = addexpense.ExId,
- ExpenseCategory = addexpense.ExpenseCategory,
- Amount=addexpense.Amount,
- ItemName=addexpense.ItemName,
- Exdate=addexpense.Exdate
- };
- }
- protected async override void OnAppearing()
- {
- var pick = await _connection.Table<ExpenseCatMaster>().ToListAsync();
- expenseList.ItemsSource = pick;
- expenseList.ItemDisplayBinding = new Binding("ExCategory");
- base.OnAppearing();
- }
- private async void OnSave(object sender, EventArgs e)
- {
- var expense = new Expense
- {
- ExpenseCategory = expenseList.Items[expenseList.SelectedIndex].ToString(),
- SelectedIndex = expenseList.SelectedIndex,
-
- ItemName=itemName.Text,
- Amount = Convert.ToDecimal(amount.Text),
- Exdate=datepick.Date
- };
- await _connection.InsertAsync(expense);
- await Navigation.PopAsync();
- }
after saving the detils .. it will appear in master page
when i click the iteam we want to change ie,In edit mode , picker doesnot display the selected item
and now when i click save button i ahve to update existing data . Dont create new fields in table.
masterpage.xaml
- <ContentPage.ToolbarItems>
- <ToolbarItem Icon="plus.png" Text="Add" Activated="ToolbarItem_Activated" Order="Primary"/>
- </ContentPage.ToolbarItems>
- <ListView x:Name="iList" ItemSelected="ListView_ItemSelected">
- <ListView.ItemTemplate>
- <DataTemplate>
- <TextCell Text="{Binding Amount}" Detail="{Binding InId}" >
- <TextCell.ContextActions>
- <MenuItem Text="Delete"
- IsDestructive="True"
- Clicked="MenuItem_Clicked"
- CommandParameter="{Binding .}" />
- </TextCell.ContextActions>
- </TextCell>
- </DataTemplate>
- </ListView.ItemTemplate>
- </ListView>
masterpage.xaml.cs
- public partial class AddExpense : ContentPage
- {
- private ObservableCollection<Expense> _income;
- private SQLiteAsyncConnection _connection;
- private bool _isDataLoaded;
- public AddExpense ()
- {
- InitializeComponent ();
- _connection = DependencyService.Get<ISQLiteDb>().GetConnection();
- }
- protected async override void OnAppearing()
- {
- if (_isDataLoaded)
- return;
- _isDataLoaded = true;
- await LoadData();
- base.OnAppearing();
- }
- private async Task LoadData()
- {
- await _connection.CreateTableAsync<Expense>();
- var incomeTab = await _connection.Table<Expense>().ToListAsync();
- _income = new ObservableCollection<Expense>(incomeTab);
- iList.ItemsSource = _income;
- }
- private async void OnAdd(object sender, EventArgs e)
- {
- var page = new ExpenseDetail(new Expense());
- page.ExpenseAdded += (source, expense) =>
- {
- _income.Add(expense);
- };
- await Navigation.PushAsync(page);
- }
- private async void IList_ItemSelected(object sender, SelectedItemChangedEventArgs e)
- {
- if (iList.SelectedItem == null)
- return;
- var selectIncome = e.SelectedItem as Expense;
- iList.SelectedItem = null;
- var page = new ExpenseDetail(selectIncome);
-
-
-
-
-
-
-
-
- await Navigation.PushAsync(page);
- }
- private async void MenuItem_Clicked(object sender, EventArgs e)
- {
- var income = (sender as MenuItem).CommandParameter as Expense;
- if (await DisplayAlert("Warning", $"Are you sure you want to delete {income.ExpenseCategory}?", "differentiate
- {
- _income.Remove(income);
- await _connection.DeleteAsync(income);
- }
- }
- }
Please Help. How will i differenciate update and save