UWP: передача данных между MainPage.cs и Views \ Page.cs - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть MainPage с кодом для моего NavigationView.MainPage переходит на страницы с помощью frame.navigate ().Одна из страниц содержит текстовые поля для введенных пользователем данных.Я хотел бы взять эти введенные данные и использовать их для изменения того, что отображается на другой странице.

Я просмотрел здесь много похожих сообщений о передаче данных из одного представления в другое, и все онииспользуйте frame.navigate (typeof (page), параметр).Но мои параметры не находятся на главной странице, где у меня есть элементы управления навигацией.

MainPage.xaml

<Page>
<Grid>
    <NavigationView x:Name="nvTopLevelNav">
        <NavigationView.MenuItems>
            <NavigationViewItem Icon="Setting" Content="Page1" Tag="Page1" />
            <NavigationViewItem Icon="Rotate" Content="Page2" Tag="Page2" />
            </NavigationView.MenuItems>
        <Frame x:Name="contentFrame"></Frame>
    </NavigationView>
</Grid>
</Page>

MainPage.xaml.cs:

namespace App
{
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }
    #region NavigationView event handlers
    private void nvTopLevelNav_Loaded(object sender, RoutedEventArgs e)
    {        
        // set the initial SelectedItem
        foreach (NavigationViewItemBase item in nvTopLevelNav.MenuItems)
        {
            if (item is NavigationViewItem && item.Tag.ToString()=="Page1")
            {
                nvTopLevelNav.SelectedItem = item;
                break;
            }
        }
    }
    private void nvTopLevelNav_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
    {
        Windows.UI.Xaml.Controls.NavigationViewItem Item = args.SelectedItem as Windows.UI.Xaml.Controls.NavigationViewItem;

        if (Item.Tag is string ItemTag)
        {
            switch (ItemTag)
            {
                case "Page1":
                    contentFrame.Navigate(typeof(SettingsPage));
                    sender.Header = "Page1";
                    break;

                case "Page2":
                    contentFrame.Navigate(typeof(Page2));
                    sender.Header = "Page2";
                    break;
            }
        }
    }
}
}

Page1.xaml

<Page>
<Grid>
    <Button Name="OutputFolderButton" Click="OutputFolderButtonClick">
        <Image  x:Name="FileButton" Source="Assets/FileButton.png"/>
    </Button>
    <ToggleSwitch Name="ToggleSwitch" Toggled="SwitchToggled"/>
    <TextBox Name="TextBox1" TextChanged="TextBox1Changed"/>
    <TextBox Name="TextBox2" TextChanged="TextBox2Changed"/>
    <TextBox Name="TextBox3" TextChanged="TextBox3Changed"/>
    <TextBox Name="TextBox4" TextChanged="TextBox4Changed"/>
</Grid>
</Page>

Page1.xaml.cs:

namespace App
{
public sealed partial class SettingsPage : Page
{
    public SettingsPage()
    {
        InitializeComponent();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

    }
    public async void OutputFolderButtonClick(object sender, RoutedEventArgs e)
    {
        var picker = new Windows.Storage.Pickers.FolderPicker
        {
            SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.ComputerFolder
        };
        picker.FileTypeFilter.Add("*");

        Windows.Storage.StorageFolder outputFolder = await picker.PickSingleFolderAsync();
        if (outputFolder != null)
        {
            OutputFolderTextBox.Text = outputFolder.Path;
            OutputFolderTextBox.FontStyle = Windows.UI.Text.FontStyle.Normal;
        }
    }
    private void SwitchToggled(object sender, RoutedEventArgs e)
    {
    }
    private void TextBox1Changed(object sender, TextChangedEventArgs e)
    {
    }
    private void TextBox2Changed(object sender, TextChangedEventArgs e)
    {
    }
    private void TextBox3Changed(object sender, TextChangedEventArgs e)
    {
    }
    private void TextBox4Changed(object sender, TextChangedEventArgs e)
    {
    }
}
}

Я бы хотел, чтобы события TextChanged передавали данные в MainPage, чтобы все даты были доступны в однойместо.Со всеми данными в MainPage, я могу передать их на другие страницы, как они называются.

1 Ответ

0 голосов
/ 04 февраля 2019

Xeorge прав.Вообще говоря, вы можете хранить свои данные в отдельном слое данных, и каждая ваша виртуальная машина может получить доступ к этому уровню данных, чтобы получить то, что они хотят.Это на самом деле лучшая практика для вас.

И чтобы сделать это более понятным, пожалуйста, проверьте официальный документ: Привязка данных и MVVM А для получения дополнительной информации о примерах вы можете увидеть это из приведенного вышеdoc: «Для получения дополнительных инструкций по использованию базового, готового к использованию MVVM, ознакомьтесь с образцом базы данных заказов клиентов на GitHub. Многие другие примеры приложений UWP также используютбазовая архитектура MVVM, а образец Traffic App включает версии с выделенным кодом и версии MVVM с примечаниями, описывающими преобразование MVVM . "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...