Возникли проблемы со свойствами в моем объекте - PullRequest
0 голосов
/ 27 марта 2020

У меня есть некоторые проблемы со свойствами моего объекта, я могу получить и установить свойства из всех аспектов моего проекта, то есть со страницы, запись которой связана с IsCancelled (он получает и устанавливает свойство) также из другого метода то есть IsCancelled = true; но когда я хочу прочитать свойство, которое только что было изменено, со всплывающей страницы, страница, которая вызывает всплывающую страницу, всегда дает значение по умолчанию и не видит изменений со всплывающей страницы.

Примечание: Отредактировано, чтобы привести его в соответствие с правилами, установленными Джейсоном.

FolderView ...

public partial class FolderView : ContentPage
{

    public FolderView()
    {           
        InitializeComponent();
        BindingContext = NetworkBase = new BaseNetWork(GridFolders, btnConnect, lblNet);
    }
}

PopupPage

public partial class PopupShareDetails : ContentPage
{
    public PopupShareDetails()
    {
        InitializeComponent();
        BindingContext = new ViewModelBase();
    }

}

BaseNetWork Class ..

class BaseNetWork : ViewModelBase
{
    public BaseNetWork(Grid grid, Image img, Label lbl)
    {
        BaseImages Images = new BaseImages();
        NetworkShares NetWorkData = new NetworkShares();

        img.GestureRecognizers.Add(new TapGestureRecognizer((view) => OpenShares()));
        async void OpenShares()
        {
                    if (ConnectToShares)
                    {
                        if (HasParams())
                        {
                            DependencyService.Get<ILodingPageService>().InitLoadingPage(new LoadingConnectedShares());
                            DelayTime = 2000;
                        } else {
                            DependencyService.Get<ILodingPageService>().InitLoadingPage(new AddConnectionDetails());
                            DelayTime = 20000;
                        }
                    } else {

                        DependencyService.Get<ILodingPageService>().InitLoadingPage(new LoadingAllShares());
                        DelayTime = 2000;
                }
                    DependencyService.Get<ILodingPageService>().ShowLoadingPage();
                    await Task.Delay(DelayTime).ConfigureAwait(true);
                    if (IsCancelled != true)
                    {
                        NetWorkData.DeploySharesToGrid(grid, null, ConnectToShares);
                        DependencyService.Get<ILodingPageService>().HideLoadingPage();
                        IsCancelled = false;
                    };

                    if (IsConnected)
                    {
                        img.Source = Images.GetImages(3);
                        lbl.Text = "Disconnect";
                    };
                }
        }
    }
}

Класс BaseNetWork происходит от моего ViewModelBase

Может кто-нибудь сказать мне, почему это произошло?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Извините за задержку, я был вынужден снова учиться: -)

Во всяком случае, я действительно решил эту покупку, сделав следующее, очень похожее на то, что предложил Лукас Чжан ...

Сначала я создал класс GlobalViewModel ...

public static class GlobalViewModel
{
    private static ViewModelBase ObjectBase = new ViewModelBase();

    public static ViewModelBase BaseObject
    {
        get
        {
            return ObjectBase ;
        }
    }
}

Затем на каждой странице я называю это так ...

    ViewModelBase BaseObject = GlobalViewModel.BaseObject;
    public MainPage()
    {
        InitializeComponent();
        BindingContext = BaseObject;
    }

Если я хочу вызвать его из не унаследованный объект класса, тогда я могу использовать следующее в методе или в начале этого класса, например ...

ViewModelBase BaseObject = GlobalViewModel.MainViewModel; var foo = BaseObject.FooBar;
0 голосов
/ 30 марта 2020

Если вы хотите передать текущую ВМ на всплывающую страницу. Определите конструктор с помощью параметра.

public partial class PopupShareDetails : ContentPage
{

    BaseNetWork currentVM;

    public PopupShareDetails()
    {
        InitializeComponent();
       // BindingContext = new ViewModelBase();
    }

    public PopupShareDetails(BaseNetWork vm)
    {
        InitializeComponent();
        BindingContext = currentVM = vm;
    }


}

И откройте всплывающую страницу, когда вы хотите ее открыть.

var popupPage = new PopupShareDetails(NetworkBase);
// navigation logic
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...