public static async Task <int> DeleteItemAsync(OpportunityModel opportunity)
        {
            if (!_isInitialized)
            {
                await Initialize();
            }

            return(await _database.DeleteAsync(opportunity));
        }
Exemplo n.º 2
0
        public OpportunitiesViewModel()
        {
            MessagingCenter.Subscribe <object>(this, "RefreshData", async(sender) =>
            {
                await RefreshOpportunitiesDataAsync();
            });

            Task.Run(async() =>
            {
                // If the database is empty, initialize the database with dummy data
                if (await App.Database.GetNumberOfRowsAsync() < 20)
                {
                    for (int i = 0; i < 20; i++)
                    {
                        var tempModel = new OpportunityModel();

                        var rnd          = new Random();
                        var companyIndex = rnd.Next(50);
                        var dbaIndex     = rnd.Next(50);
                        var leaseAmount  = rnd.Next(1000000);
                        var ownerIndex   = rnd.Next(50);
                        var dayIndex     = rnd.Next(1, 28);
                        var monthIndex   = rnd.Next(1, 12);
                        var yearIndex    = rnd.Next(2000, 2015);

                        var salesStageNumber = rnd.Next(2);
                        SalesStages salesStage;
                        switch (salesStageNumber)
                        {
                        case 0:
                            salesStage = SalesStages.New;
                            break;

                        case 1:
                            salesStage = SalesStages.Pending;
                            break;

                        default:
                            salesStage = SalesStages.Closed;
                            break;
                        }

                        tempModel.Topic       = $"{i + 715003} / Investment Data Corp";
                        tempModel.Company     = $"{LoremIpsumConstants.LoremIpsum.Substring(companyIndex, 10)}";
                        tempModel.DBA         = $"{LoremIpsumConstants.LoremIpsum.Substring(dbaIndex, 10)}";
                        tempModel.LeaseAmount = leaseAmount;
                        tempModel.SalesStage  = salesStage;
                        tempModel.Owner       = $"{LoremIpsumConstants.LoremIpsum.Substring(ownerIndex, 10)}";
                        tempModel.DateCreated = new DateTime(yearIndex, monthIndex, dayIndex);

                        await App.Database.SaveOpportunityAsync(tempModel);
                    }
                }
                await RefreshOpportunitiesDataAsync();
            });
        }
        public AddOpportunityViewModel(AddOpportunityPage page)
        {
            addOpportunityModel = new OpportunityModel();
            SalesStage          = SalesStages.New;

            SaveButtonTapped = new Command(() =>
            {
                DateCreated = DateTime.Now;
                Task.Run(() => App.Database.SaveOpportunity(addOpportunityModel));
                page.HandleSaveToDatabaseCompleted(page, new EventArgs());
            });
        }
		public OpportunitiesViewModel()
		{
			Task.Run(async () => await RefreshOpportunitiesData());

			MessagingCenter.Subscribe<object>(this, "RefreshData", async (sender) =>
			{
				await RefreshOpportunitiesData();
			});

			// If the database is empty, initialize the database with dummy data
			if (App.Database.GetNumberOfRows() < 20)
			{
				for (int i = 0; i < 20; i++)
				{
					var tempModel = new OpportunityModel();

					var rnd = new Random();
					var companyIndex = rnd.Next(50);
					var dbaIndex = rnd.Next(50);
					var leaseAmount = rnd.Next(1000000);
					var ownerIndex = rnd.Next(50);
					var dayIndex = rnd.Next(1, 28);
					var monthIndex = rnd.Next(1, 12);
					var yearIndex = rnd.Next(2000, 2015);

					var salesStageNumber = rnd.Next(2);
					SalesStages salesStage;
					switch (salesStageNumber)
					{
						case 0:
							salesStage = SalesStages.New;
							break;
						case 1:
							salesStage = SalesStages.Pending;
							break;
						default:
							salesStage = SalesStages.Closed;
							break;
					}

					tempModel.Topic = $"{i + 715003} / Investment Data Corp";
					tempModel.Company = $"{LoremIpsum_Constants.LoremIpsum.Substring(companyIndex, 10)}";
					tempModel.DBA = $"{LoremIpsum_Constants.LoremIpsum.Substring(dbaIndex, 10)}";
					tempModel.LeaseAmount = leaseAmount;
					tempModel.SalesStage = salesStage;
					tempModel.Owner = $"{LoremIpsum_Constants.LoremIpsum.Substring(ownerIndex, 10)}";
					tempModel.DateCreated = new DateTime(yearIndex, monthIndex, dayIndex);

					App.Database.SaveOpportunity(tempModel);
				}
			}
		}
Exemplo n.º 5
0
        public static async Task <int> SaveOpportunityAsync(OpportunityModel opportunity)
        {
            var databaseConnection = await GetDatabaseConnectionAsync();

            var isOpportunityInDatabase = await GetOpportunityByTopicAsync(opportunity.Topic) != null;

            if (isOpportunityInDatabase)
            {
                return(await databaseConnection.UpdateAsync(opportunity));
            }

            return(await databaseConnection.InsertAsync(opportunity));
        }
 public int SaveOpportunity(OpportunityModel opportunity)
 {
     lock (locker)
     {
         if (GetOpportunityByTopic(opportunity.Topic) != null)
         {
             database.Update(opportunity);
             return(opportunity.ID);
         }
         else
         {
             return(database.Insert(opportunity));
         }
     }
 }
        public static async Task <int> SaveOpportunityAsync(OpportunityModel opportunity)
        {
            if (!_isInitialized)
            {
                await Initialize();
            }

            var isOpportunityInDatabase = await GetOpportunityByTopicAsync(opportunity.Topic) != null;

            if (isOpportunityInDatabase)
            {
                return(await _database.UpdateAsync(opportunity));
            }

            return(await _database.InsertAsync(opportunity));
        }
        public AddOpportunityViewModel()
        {
            addOpportunityModel = new OpportunityModel();
            SalesStage          = SalesStages.New;

            SaveButtonTapped = new Command(() =>
            {
                if (Topic.Length == 0 || Company.Length == 0 || Owner.Length == 0 || DBA.Length == 0 || LeaseAmount == 0)
                {
                    SaveError(this, new EventArgs());
                    return;
                }

                DateCreated = DateTime.Now;
                Task.Run(() => App.Database.SaveOpportunity(addOpportunityModel));
                SaveToDatabaseCompleted(this, new EventArgs());
            });
        }
Exemplo n.º 9
0
        async Task InitializeDataInDatabaseAsync(int numberOfOpportunityModelsToGenerate = 20)
        {
            for (int i = 0; i < numberOfOpportunityModelsToGenerate; i++)
            {
                var tempModel = new OpportunityModel();

                var rnd          = new Random();
                var companyIndex = rnd.Next(50);
                var dbaIndex     = rnd.Next(50);
                var leaseAmount  = rnd.Next(1000000);
                var ownerIndex   = rnd.Next(50);
                var dayIndex     = rnd.Next(1, 28);
                var monthIndex   = rnd.Next(1, 12);
                var yearIndex    = rnd.Next(2000, 2015);

                var         salesStageNumber = rnd.Next(2);
                SalesStages salesStage;
                switch (salesStageNumber)
                {
                case 0:
                    salesStage = SalesStages.New;
                    break;

                case 1:
                    salesStage = SalesStages.Pending;
                    break;

                default:
                    salesStage = SalesStages.Closed;
                    break;
                }

                tempModel.Topic       = $"{i + 715003} / Investment Data Corp";
                tempModel.Company     = $"{LoremIpsumConstants.LoremIpsum.Substring(companyIndex, 10)}";
                tempModel.DBA         = $"{LoremIpsumConstants.LoremIpsum.Substring(dbaIndex, 10)}";
                tempModel.LeaseAmount = leaseAmount;
                tempModel.SalesStage  = salesStage;
                tempModel.Owner       = $"{LoremIpsumConstants.LoremIpsum.Substring(ownerIndex, 10)}";
                tempModel.DateCreated = new DateTime(yearIndex, monthIndex, dayIndex);

                await OpportunityModelDatabase.SaveOpportunityAsync(tempModel);
            }
        }
        public async Task <int> SaveOpportunityAsync(OpportunityModel opportunity)
        {
            var isOpportunityInDatabase = await GetOpportunityByTopicAsync(opportunity.Topic) != null;

            return(await Task.Run(() =>
            {
                if (isOpportunityInDatabase)
                {
                    lock (_locker)
                    {
                        database.Update(opportunity);
                    }
                    return opportunity.ID;
                }

                lock (_locker)
                {
                    return database.Insert(opportunity);
                }
            }));
        }
Exemplo n.º 11
0
        public static async Task <int> SaveOpportunity(OpportunityModel opportunity)
        {
            var databaseConnection = await GetDatabaseConnection <OpportunityModel>().ConfigureAwait(false);

            return(await ExecuteDatabaseFunction(() => databaseConnection.InsertOrReplaceAsync(opportunity)).ConfigureAwait(false));
        }
Exemplo n.º 12
0
        public OpportunityDetailsPage(OpportunityModel opportunityModelSelected)
        {
            BindingContext = opportunityModelSelected;

            var topicLabel = new OpportunitiesDetailsTextLabel
            {
                Text = "Topic"
            };

            var topicEntry = new Label();

            topicEntry.SetBinding(Label.TextProperty, nameof(OpportunityModel.Topic));

            var companyLabel = new OpportunitiesDetailsTextLabel
            {
                Text = "Company"
            };

            var companyEntry = new Label();

            companyEntry.SetBinding(Label.TextProperty, nameof(OpportunityModel.Company));

            var dbaLabel = new OpportunitiesDetailsTextLabel
            {
                Text = "DBA"
            };

            var dbaEntry = new Label();

            dbaEntry.SetBinding(Label.TextProperty, nameof(OpportunityModel.DBA));

            var leaseAmountLabel = new OpportunitiesDetailsTextLabel
            {
                Text = "Lease Amount"
            };

            var leaseAmountEntry = new Label();

            leaseAmountEntry.SetBinding(Label.TextProperty, nameof(OpportunityModel.LeaseAmount));

            var ownerLabel = new OpportunitiesDetailsTextLabel
            {
                Text = "Owner"
            };

            var ownerEntry = new Label();

            ownerEntry.SetBinding(Label.TextProperty, nameof(OpportunityModel.Owner));

            var mainLayout = new RelativeLayout();

            mainLayout.Children.Add(topicLabel,
                                    Constraint.Constant(0),
                                    Constraint.Constant(0)
                                    );
            mainLayout.Children.Add(topicEntry,
                                    Constraint.Constant(0),
                                    Constraint.RelativeToView(topicLabel, (parent, view) => view.Y + view.Height),
                                    Constraint.RelativeToParent((parent) => parent.Width)
                                    );
            mainLayout.Children.Add(companyLabel,
                                    Constraint.Constant(0),
                                    Constraint.RelativeToView(topicEntry, (parent, view) => view.Y + view.Height + _relativeLayoutSpacing)
                                    );
            mainLayout.Children.Add(companyEntry,
                                    Constraint.Constant(0),
                                    Constraint.RelativeToView(companyLabel, (parent, view) => view.Y + view.Height),
                                    Constraint.RelativeToParent((parent) => parent.Width)
                                    );
            mainLayout.Children.Add(leaseAmountLabel,
                                    Constraint.Constant(0),
                                    Constraint.RelativeToView(companyEntry, (parent, view) => view.Y + view.Height + _relativeLayoutSpacing)
                                    );
            mainLayout.Children.Add(leaseAmountEntry,
                                    Constraint.Constant(0),
                                    Constraint.RelativeToView(leaseAmountLabel, (parent, view) => view.Y + view.Height),
                                    Constraint.RelativeToParent((parent) => parent.Width)
                                    );
            mainLayout.Children.Add(ownerLabel,
                                    Constraint.Constant(0),
                                    Constraint.RelativeToView(leaseAmountEntry, (parent, view) => view.Y + view.Height + _relativeLayoutSpacing)
                                    );
            mainLayout.Children.Add(ownerEntry,
                                    Constraint.Constant(0),
                                    Constraint.RelativeToView(ownerLabel, (parent, view) => view.Y + view.Height),
                                    Constraint.RelativeToParent((parent) => parent.Width)
                                    );
            mainLayout.Children.Add(dbaLabel,
                                    Constraint.Constant(0),
                                    Constraint.RelativeToView(ownerEntry, (parent, view) => view.Y + view.Height + _relativeLayoutSpacing)
                                    );
            mainLayout.Children.Add(dbaEntry,
                                    Constraint.Constant(0),
                                    Constraint.RelativeToView(dbaLabel, (parent, view) => view.Y + view.Height),
                                    Constraint.RelativeToParent((parent) => parent.Width)
                                    );

            Title = PageTitleConstants.OpportunityDetailPage;;

            var termsScrollView = new ScrollView
            {
                Content = mainLayout
            };

            Padding = new Thickness(10, 0, 10, 0);

            Content = termsScrollView;
        }
        public OpportunitiesViewCell()
        {
            var model = BindingContext as OpportunityModel;

            #region Create Image
            var beaconFundingImage = new Image
            {
                Source = "beaconfundingicon"
            };
            #endregion

            #region Create Topic Stack
            var topicLabel = new Label
            {
                Text           = "Topic",
                FontAttributes = FontAttributes.Bold
            };
            var topic = new Label();
            topic.SetBinding(Label.TextProperty, nameof(model.Topic));

            var topicStack = new StackLayout
            {
                Children =
                {
                    topicLabel,
                    topic
                }
            };
            #endregion

            #region Create Company
            var companyLabel = new Label
            {
                Text           = "Company",
                FontAttributes = FontAttributes.Bold
            };
            var company = new Label();
            company.SetBinding(Label.TextProperty, nameof(model.Company));

            var companyStack = new StackLayout
            {
                Children =
                {
                    companyLabel,
                    company
                }
            };
            #endregion

            #region Create LeaseAmount
            var leaseAmountLabel = new Label
            {
                Text           = "LeaseAmount",
                FontAttributes = FontAttributes.Bold
            };
            var leaseAmount = new Label();
            leaseAmount.SetBinding(Label.TextProperty, nameof(model.LeaseAmountAsCurrency));

            var leaseAmountStack = new StackLayout
            {
                Children =
                {
                    leaseAmountLabel,
                    leaseAmount
                }
            };
            #endregion

            #region Create LeaseAmount
            var ownerLabel = new Label
            {
                Text           = "Owner",
                FontAttributes = FontAttributes.Bold
            };
            var owner = new Label();
            owner.SetBinding(Label.TextProperty, nameof(model.Owner));

            var ownerStack = new StackLayout
            {
                Children =
                {
                    ownerLabel,
                    owner
                }
            };
            #endregion

            #region Create MenuItem
            var deleteAction = new MenuItem
            {
                Text          = "Delete",
                IsDestructive = true
            };

            deleteAction.Clicked += async(sender, e) =>
            {
                var menuItem = (MenuItem)sender;
                OpportunityModel thisModel = ((OpportunityModel)menuItem.BindingContext);
                await OpportunityModelDatabase.DeleteItemAsync(thisModel);

                //Wait for the iOS animation to finish
                switch (Device.RuntimePlatform)
                {
                case Device.iOS:
                    await Task.Delay(300);

                    break;
                }

                MessagingCenter.Send <object>(this, "RefreshData");
            };
            ContextActions.Add(deleteAction);
            #endregion

            StackLayout cellStack;
            #region Create Cell Horizontal StackLayout for Phone
            if (Device.Idiom == TargetIdiom.Phone)
            {
                topic.LineBreakMode = LineBreakMode.NoWrap;
                cellStack           = new StackLayout
                {
                    HorizontalOptions = LayoutOptions.Fill,
                    Padding           = 10,
                    Spacing           = 20,
                    Orientation       = StackOrientation.Horizontal,
                    Children          =
                    {
                        beaconFundingImage,
                        topicStack
                    }
                };
            }
            #endregion

            #region Create Cell Horizontal StackLayout for Tablet or Desktop
            else
            {
                cellStack = new StackLayout
                {
                    HorizontalOptions = LayoutOptions.Fill,
                    Padding           = 10,
                    Spacing           = 20,
                    Orientation       = StackOrientation.Horizontal,
                    Children          =
                    {
                        beaconFundingImage,
                        topicStack,
                        companyStack,
                        leaseAmountStack,
                        ownerStack
                    }
                };
            }
            #endregion

            View = cellStack;
        }
Exemplo n.º 14
0
        public static async Task <int> DeleteItemAsync(OpportunityModel opportunity)
        {
            var databaseConnection = await GetDatabaseConnectionAsync();

            return(await databaseConnection.DeleteAsync(opportunity));
        }
		public AddOpportunityViewModel(AddOpportunityPage page)
		{
			addOpportunityModel = new OpportunityModel();
			SalesStage = SalesStages.New;

			SaveButtonTapped = new Command(() =>
			{
				if (Topic.Length == 0 || Company.Length == 0 || Owner.Length == 0 || DBA.Length == 0 || LeaseAmount == 0)
				{
					SaveError(this, new EventArgs());
					return;
				}

				DateCreated = DateTime.Now;
				Task.Run(() => App.Database.SaveOpportunity(addOpportunityModel));
				page.HandleSaveToDatabaseCompleted(page, new EventArgs());
			});
		}
 public OpportunitiesDataTemplate(OpportunityModel opportunityModel) : base(() => LoadTemplate(opportunityModel))
 {
 }
Exemplo n.º 17
0
        public static async Task <int> DeleteItem(OpportunityModel opportunity)
        {
            var databaseConnection = await GetDatabaseConnection <OpportunityModel>().ConfigureAwait(false);

            return(await ExecuteDatabaseFunction(() => databaseConnection.DeleteAsync(opportunity)).ConfigureAwait(false));
        }
        public OpportunitiesViewCell()
        {
            #region Create Image
            var beaconFundingImage = new Image
            {
                Source = "beaconfundingicon"
            };
            #endregion

            #region Create Topic Stack
            var topicLabel = new Label
            {
                Text           = "Topic",
                FontAttributes = FontAttributes.Bold
            };
            var topic = new Label();
            topic.SetBinding(Label.TextProperty, "Topic");

            var topicStack = new StackLayout
            {
                Children =
                {
                    topicLabel,
                    topic
                }
            };
            #endregion

            #region Create Company
            var companyLabel = new Label
            {
                Text           = "Company",
                FontAttributes = FontAttributes.Bold
            };
            var company = new Label();
            company.SetBinding(Label.TextProperty, "Company");

            var companyStack = new StackLayout
            {
                Children =
                {
                    companyLabel,
                    company
                }
            };
            #endregion

            #region Create LeaseAmount
            var leaseAmountLabel = new Label
            {
                Text           = "LeaseAmount",
                FontAttributes = FontAttributes.Bold
            };
            var leaseAmount = new Label();
            leaseAmount.SetBinding(Label.TextProperty, "LeaseAmountAsCurrency");

            var leaseAmountStack = new StackLayout
            {
                Children =
                {
                    leaseAmountLabel,
                    leaseAmount
                }
            };
            #endregion

            #region Create LeaseAmount
            var ownerLabel = new Label
            {
                Text           = "Owner",
                FontAttributes = FontAttributes.Bold
            };
            var owner = new Label();
            owner.SetBinding(Label.TextProperty, "Owner");

            var ownerStack = new StackLayout
            {
                Children =
                {
                    ownerLabel,
                    owner
                }
            };
            #endregion

            #region
            var deleteAction = new MenuItem
            {
                Text          = "Delete",
                IsDestructive = true
            };
            deleteAction.SetBinding(MenuItem.CommandProperty, "DeleteActionSelected");

            deleteAction.Clicked += (sender, e) =>
            {
                var menuItem = (MenuItem)sender;
                OpportunityModel thisModel = ((OpportunityModel)menuItem.BindingContext);
                App.Database.DeleteItem(thisModel.ID);
                MessagingCenter.Send <object>(this, "RefreshData");
            };
            ContextActions.Add(deleteAction);
            #endregion

            StackLayout cellStack;
            #region Create Cell Horizontal StackLayout for Phone
            if (Device.Idiom == TargetIdiom.Phone)
            {
                topic.LineBreakMode = LineBreakMode.NoWrap;
                cellStack           = new StackLayout
                {
                    HorizontalOptions = LayoutOptions.Fill,
                    Padding           = 10,
                    Spacing           = 20,
                    Orientation       = StackOrientation.Horizontal,
                    Children          =
                    {
                        beaconFundingImage,
                        topicStack
                    }
                };
            }
            #endregion

            #region Create Cell Horizontal StackLayout for Tablet or Desktop
            else
            {
                cellStack = new StackLayout
                {
                    HorizontalOptions = LayoutOptions.Fill,
                    Padding           = 10,
                    Spacing           = 20,
                    Orientation       = StackOrientation.Horizontal,
                    Children          =
                    {
                        beaconFundingImage,
                        topicStack,
                        companyStack,
                        leaseAmountStack,
                        ownerStack
                    }
                };
            }
            #endregion

            View = cellStack;
        }
 static Task ExecuteSwipeViewTappedCommand(OpportunityModel opportunityModel) =>
 Application.Current.MainPage.Navigation.PushAsync(new OpportunityDetailsPage(opportunityModel));
            static SwipeView LoadTemplate(OpportunityModel opportunityModel)
            {
                var beaconFundingImage = new Image
                {
                    Source        = "beaconfundingicon",
                    HeightRequest = _rowHeight
                };

                var topicTitleLabel = new Label
                {
                    Text                  = "Topic",
                    FontAttributes        = FontAttributes.Bold,
                    VerticalTextAlignment = TextAlignment.End
                };

                var topicDescriptionLabel = new Label
                {
                    VerticalTextAlignment = TextAlignment.Start,
                    Text = opportunityModel.Topic
                };

                var companyTitleLabel = new Label
                {
                    Text                  = "Company",
                    FontAttributes        = FontAttributes.Bold,
                    VerticalTextAlignment = TextAlignment.End
                };

                var companyDescriptionLabel = new Label
                {
                    VerticalTextAlignment = TextAlignment.Start,
                    Text = opportunityModel.Company
                };

                var leaseAmountTitleLabel = new Label
                {
                    Text                  = "Lease Amount",
                    FontAttributes        = FontAttributes.Bold,
                    VerticalTextAlignment = TextAlignment.End
                };

                var leaseAmountDescriptionLabel = new Label
                {
                    VerticalTextAlignment = TextAlignment.Start,
                    Text = opportunityModel.LeaseAmountAsCurrency
                };

                var ownerTitleLabel = new Label
                {
                    Text                  = "Owner",
                    FontAttributes        = FontAttributes.Bold,
                    VerticalTextAlignment = TextAlignment.End
                };

                var ownerDescriptionLabel = new Label
                {
                    VerticalTextAlignment = TextAlignment.Start,
                    Text = opportunityModel.Owner
                };

                var grid = new Grid
                {
                    BackgroundColor = Color.White,

                    Padding = new Thickness(5, 0, 0, 0),

                    ColumnSpacing  = 20,
                    RowDefinitions =
                    {
                        new RowDefinition {
                            Height = new GridLength(1, GridUnitType.Star)
                        },
                        new RowDefinition {
                            Height = new GridLength(1, GridUnitType.Star)
                        }
                    },
                    ColumnDefinitions =
                    {
                        new ColumnDefinition {
                            Width = new GridLength(_rowHeight / 3, GridUnitType.Absolute)
                        },
                        new ColumnDefinition {
                            Width = new GridLength(1, GridUnitType.Star)
                        }
                    }
                };

                grid.Children.Add(beaconFundingImage, 0, 0);
                Grid.SetRowSpan(beaconFundingImage, 2);

                grid.Children.Add(topicTitleLabel, 1, 0);
                grid.Children.Add(topicDescriptionLabel, 1, 1);

                if (Device.Idiom != TargetIdiom.Phone)
                {
                    grid.ColumnDefinitions.Add(new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    });
                    grid.ColumnDefinitions.Add(new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    });
                    grid.ColumnDefinitions.Add(new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    });


                    grid.Children.Add(companyTitleLabel, 2, 0);
                    grid.Children.Add(companyDescriptionLabel, 2, 1);

                    grid.Children.Add(leaseAmountTitleLabel, 3, 0);
                    grid.Children.Add(leaseAmountDescriptionLabel, 3, 1);

                    grid.Children.Add(ownerTitleLabel, 4, 0);
                    grid.Children.Add(ownerDescriptionLabel, 4, 1);
                }

                var deleteSwipeItem = new SwipeItem
                {
                    Text            = "Delete",
                    IconImageSource = "Delete",
                    BackgroundColor = Color.Red,
                    Command         = new AsyncCommand <string>(ExecuteSwipeToDeleteCommand)
                };

                deleteSwipeItem.SetBinding(SwipeItem.CommandParameterProperty, nameof(OpportunityModel.Topic));

                var rightSwipeItems = new SwipeItems
                {
                    Mode = SwipeMode.Execute
                };

                rightSwipeItems.Add(deleteSwipeItem);

                var swipeViewTappedCommand = new AsyncCommand <OpportunityModel>(ExecuteSwipeViewTappedCommand);

                var swipeView = new ExtendedSwipeView(swipeViewTappedCommand, opportunityModel)
                {
                    RightItems = rightSwipeItems,
                    Content    = grid,
                    Margin     = new Thickness(0, 5, 0, 15)
                };

                return(swipeView);
            }