Xamarin — Инструкция переключения для «Следовать» и «Не следовать»

#visual-studio-2010 #xamarin #xamarin.android #switch-statement

Вопрос:

Я пытаюсь сделать методы «подписаться» и «отменить подписку» в профиле пользователя, я сделал этот код, но основная проблема в том, что пользователь успешно выполнил подписку, но если вы снова нажмете кнопку, то тост покажет, что отписался, и изображение кнопки изменится (как будто вы снова будете подписываться), но если вы обновите следующее изображение, снова покажется, что ничего не произошло

 switch (BtnFollow?.Tag?.ToString())
                {
                    case "Add": //Sent follow 
                        BtnFollow.SetColor(Color.ParseColor(AppSettings.MainColor));
                        BtnFollow.SetImageResource(Resource.Drawable.ic_tick);
                        BtnFollow.Tag = "friends";
                        DataUser.IsFollowing = true;

                        Toast.MakeText(Context, Context.GetText(Resource.String.Lbl_Sent_successfully_followed),
                            ToastLength.Short)?.Show();
                        PollyController.RunRetryPolicyFunction(new List<Func<Task>> { () => RequestsAsync.User.FollowUnFollowUserAsync(UserId, true) });
                        break;
                    case "friends": //Sent un follow 
                        BtnFollow.SetColor(Color.ParseColor("#444444"));
                        BtnFollow.SetImageResource(Resource.Drawable.ic_add);
                        BtnFollow.Tag = "Add";
                        DataUser.IsFollowing = false;

                        Toast.MakeText(Context, Context.GetText(Resource.String.Lbl_Sent_successfully_Unfollowed),
                            ToastLength.Short)?.Show();
                        PollyController.RunRetryPolicyFunction(new List<Func<Task>> { () => RequestsAsync.User.FollowUnFollowUserAsync(UserId, false) });
                        break;
                }

                var dataUser = GlobalContext?.MainFragment?.ArtistsAdapter?.ArtistsList?.FirstOrDefault(a => a.Id == DataUser.Id);
                if (dataUser != null)
                {
                    dataUser.IsFollowing = DataUser.IsFollowing;
                    GlobalContext.MainFragment.ArtistsAdapter.NotifyDataSetChanged();
                }
            }
            catch (Exception exception)
            {
                Methods.DisplayReportResultTrack(exception);
            }
        } 
 

и этот код для проверки следующего статуса

 if (DataUser.IsFollowing != null amp;amp; DataUser.IsFollowing.Value) // My Friend
                {
                    BtnFollow.SetColor(Color.ParseColor(AppSettings.MainColor));
                    BtnFollow.SetImageResource(Resource.Drawable.ic_tick);
                    BtnFollow.Tag = "friends";
                }
                else  //Not Friend
                {
                    BtnFollow.SetColor(Color.ParseColor("#444444"));
                    BtnFollow.SetImageResource(Resource.Drawable.ic_add);
                    BtnFollow.Tag = "Add";
                }
            }
 

Комментарии:

1. вы используете свойство пользовательского интерфейса («Тег») для отслеживания переменной состояния. Это не очень хорошая стратегия. У вас уже было свойство bool в вашей модели, IsFollowing которое вы должны использовать вместо этого.

2. Я пытался удалить тег, не могли бы вы подробнее объяснить, как вместо этого использовать IsFollowing? @Джейсон

3. Эта ссылка( docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/… ) может вам помочь.