我有一个MainPage,其中包含我的NavigationView的代码。 MainPage导航到带有frame.navigate()的页面。其中一页包含用于用户输入数据的文本框。我想采取输入的数据,并用它来改变所显示的另一页。
我在这里看过很多类似的文章,它们将数据从一个视图传递到另一个视图,它们都使用frame.navigate(typeof(page),parameter)。但我的参数不在的MainPage,其中我有导航控制。
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中的所有数据,然后我可以将其传递给其他页面。
答案 0 :(得分:1)
Xeorge是对的。一般来说,您可以将数据保存在单独的数据层中,并且每个VM都可以访问该数据层以获取所需的数据。这实际上是您的最佳实践。
为使这一点更加清楚,请检查官方文档:Data binding and MVVM 有关示例的更多信息,您可以从上面的文档中看到: “有关使用基本的现成MVVM的其他指导,请查看GitHub上的Customers Orders Database sample。其他UWP app samples的其他人也使用了基本的MVVM体系结构,而{{3} }包括代码隐藏版本和MVVM版本,并带有说明Traffic App sample的注释。”