Как передавать информацию между главным окном и AppWindow в приложении UWP? - PullRequest
0 голосов
/ 20 июня 2020

Итак, я разрабатываю приложение, и для открытия некоторых элементов требуется окно свойств. Я следил за этим руководством о том, как использовать AppWindow.

То, что я не могу понять, так это как передать sh информацию между главным окном и свойствами окно. Так же, как и при его первом открытии, мне нужно предоставить ему все сохраненные свойства для отображения, но окно свойств должно содержать sh любые изменения в главном окне для сохранения и использования.

I имеют очень примитивный код, но я думаю, что он демонстрирует то, что я делаю.

MainPage.xaml.cs:

public sealed partial class MainPage : Page
{

    ...

    public async Task OpenPropertiesWindow()
    {
        //https://docs.microsoft.com/en-us/windows/uwp/design/layout/app-window

        AppWindow properties_appwindow = await AppWindow.TryCreateAsync();
        Frame appWindowContentFrame = new Frame();
        appWindowContentFrame.Navigate(typeof(PropertiesWindow));
        ElementCompositionPreview.SetAppWindowContent(properties_appwindow, appWindowContentFrame);

        properties_appwindow.RequestSize(new Size(300, 400));
        properties_appwindow.Title = "Properties";

        //send data to the textbox in PropertiesWindow

        properties_appwindow.Closed += delegate
        {
            appWindowContentFrame.Content = null;
            properties_appwindow = null;
        };

        await properties_appwindow.TryShowAsync();
    }

PropertiesWindow.xaml:

<Page
    <Grid>
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <TextBox x:Name="txtbox_property1" PlaceholderText="property1"/>
            <Button x:Name="btn_apply" Content="Apply" Tapped="ApplyPropertiesButton_Tapped"/>
        </StackPanel>
    </Grid>
</Page>

PropertiesWindow.xaml.cs

public sealed partial class PropertiesWindow : Page
{
    public PropertiesWindow()
    {
        this.InitializeComponent();
    }

    private void ApplyPropertiesButton_Tapped(object sender, TappedRoutedEventArgs e)
    {
        string data_from_txtbox = txtbox_property1.Text;

        //push this data_from_txtbox to MainPage
    }
}

Кто-нибудь может мне помочь? Мне также нужно будет запускать другой метод обновления на MainPage при изменении свойства, поэтому мне нужен какой-то триггер, когда данные будут отправлены обратно.

1 Ответ

1 голос
/ 21 июня 2020

Вы можете использовать Frame, который вы создали после перехода, чтобы получить доступ к экземпляру Page:

var page = (PropertiesWindow)appWindowContentFrame.Content;
//do something with the page, for example
page.SomePublicMethod(myData);

To go, наоборот, вы можете использовать Window API для доступа к главному окну приложения со страницы AppWindow:

private void ApplyPropertiesButton_Tapped(object sender, TappedRoutedEventArgs e)
{
    string data_from_txtbox = txtbox_property1.Text;

    var rootFrame = (Frame)Window.Current.Content;
    var page = (MainPage)rootFrame.Content;
    page.SomePublicMethod(data_from_txtbox);
}
...