Xamarin 양식 PopupPage

모하마드 아누 티

팝업 페이지에 Rg.Plugins.Popup.Pages를 사용하고 있습니다. 버튼을 누르면 팝업이 페이지 중간에 나타나고 선택할 수있는 라디오 버튼이 있으며 완료되면 투명한 배경을 터치하여 출구. 내 문제는 배경 페이지에 페이지의 onAppearing 메소드에서 팝업 페이지에서 선택한 내용에 따라 수정해야 할 레이블이 있다는 것입니다. 팝업 페이지의 배경을 터치 할 때마다 사라지고 onAppearing of the background 페이지가 호출되지 않습니다!

버튼은 배경 페이지에 배치됩니다.

 protected override void OnAppearing()
        {
            for (int i = 0; i < TestingClass.multiselection.Count; i++)
            {
                if (TestingClass.multiselection[i].is_selected)
                    btn.Text += TestingClass.multiselection[i].description;
            }
            base.OnAppearing();
        }

팝업이 나타날 때 정적 클래스에서 값을 얻습니다. 값은 다음과 같이 저장됩니다.

private void RadioButton_Clicked(object sender, System.EventArgs e)
        {
            var rb = sender as RadioButton;
            var selection = rb.BindingContext as multi_selection;
            if (selection != null && selection.is_selected == true)
            {
                selection.is_selected = false;
            }
            else
            if (selection != null && selection.is_selected == false)
            {
                selection.is_selected = true;
                TestingClass.multiselection.Add(selection);
            }
        }
Jack Hua-MSFT

뷰에 팝업을 추가 할 때 OnApperearing 및 OnDisappearing이 모두 호출되지 않습니다.

에서 애플 문서 , 그것은 말합니다 :

viewWillAppear :

이 메서드는 뷰 컨트롤러의 뷰가 뷰 계층 구조에 추가되기 전과 뷰를 표시하기 위해 애니메이션이 구성되기 전에 호출됩니다.

에서 안드로이드 :

OnCreate

OnCreate는 활동이 생성 될 때 호출되는 첫 번째 메서드입니다.

팝업을 추가하거나 팝업을 제거하는 것은 새보기를 생성 / 제거하거나 계층 구조에서보기를 추가 / 제거하지 않습니다. 따라서 이러한 수명주기 메서드는 해당 시점에 호출되지 않습니다.

해결책:

팝업에서 선택 후 버튼의 텍스트를 설정하는 방법은 Денис Чорный의 답변에 동의 합니다. 코드로 명확히하겠습니다.

1. 용도 eventHandle:

팝업 페이지에서 다음을 정의하십시오 EventHandler.

public EventHandler SelectedStringChanged { get; set; }

에서 RadioButton_ClickedSelectedStringChanged를 호출하는 줄을 추가합니다.

    private void RadioButton_Clicked(object sender, System.EventArgs e)
    {
        var rb = sender as RadioButton;
        var selection = rb.BindingContext as multi_selection;
        if (selection != null && selection.is_selected == true)
        {
            selection.is_selected = false;
        }
        else
        if (selection != null && selection.is_selected == false)
        {
            selection.is_selected = true;
            TestingClass.multiselection.Add(selection);
        }

        //Add this line
        SelectedStringChanged(sender, e);
    }

백그라운드 페이지에서 btn.text를 처리하는 메서드를 만듭니다.

    private void Handle_SelectedStringChanged(object sender, EventArgs rags)
    {
        // ... your code
        for (int i = 0; i < TestingClass.multiselection.Count; i++)
        {
            if (TestingClass.multiselection[i].is_selected)
                btn.Text += TestingClass.multiselection[i].description;
        }
    }

팝업 방법에서 방법을 사용하십시오 Handle_SelectedStringChanged.

    private async void OnOpenPupup(object sender, EventArgs e)
    {
        _loginPopup.SelectedStringChanged += Handle_SelectedStringChanged;

        await PopupNavigation.Instance.PushAsync(_loginPopup);
    }
  1. MessageingCenter 또한 작동합니다.

백그라운드 페이지에서 :

   MessagingCenter.Subscribe<MainPage>(this, "stringSelected", (sender) => {
          // do something whenever the "stringSelected" message is sent
            for (int i = 0; i<TestingClass.multiselection.Count; i++)
                {
                    if (TestingClass.multiselection[i].is_selected)
                    btn.Text += TestingClass.multiselection[i].description;
                }
        });

팝업 페이지에서 :

  private void RadioButton_Clicked(object sender, System.EventArgs e)
    {
        var rb = sender as RadioButton;
        var selection = rb.BindingContext as multi_selection;
        if (selection != null && selection.is_selected == true)
        {
            selection.is_selected = false;
        }
        else
        if (selection != null && selection.is_selected == false)
        {
            selection.is_selected = true;
            TestingClass.multiselection.Add(selection);
        }

        MessagingCenter.Send<MainPage>(this, "stringSelected");

    }

참조 : 메시징 센터

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사