На самом деле я пытаюсь использовать самый простой способ без существующего фреймворка, но и без шаблона проектирования. Потенциальная загрузка данных при загрузке кадра, я знаю, что это может быть анти-паттерном.
Но в качестве небольшого приложения будет проще выполнить миграцию позже, когда я смогу выбрать что-то, с чем лучше всего работать. NET Межплатформенная поддержка ядра более зрелая.
Button_Click is результат, который работал. Как может работать привязка при загрузке PageNavigation.xaml?
MainWindow.xaml
<Frame Margin="12,41,12,12" Name="frame1" />
<TextBox Height="27" Margin="0,8,168,0" Name="textBox1" VerticalAlignment="Top"
HorizontalAlignment="Right" Width="244" />
<Label Height="25" HorizontalAlignment="Left" Margin="8,10,0,0" Name="label1"
VerticalAlignment="Top" Width="62">Parameter</Label>
<Button Height="26" HorizontalAlignment="Right" Margin="0,9,55,0"
x:Name="btnNavigate" VerticalAlignment="Top" Width="107" Click="btnNavigate_Click">Navigate</Button>
MainWindow.xaml.cs
private void btnNavigate_Click(object sender, RoutedEventArgs e)
{
ExtraDataObject item = new ExtraDataObject { Rank = textBox1.Text, HyperlinkColumnValue = "" };
List<ExtraDataObject> items = new List<ExtraDataObject>();
items.Add(item);
this.frame1.NavigationService.Navigate(new Uri("PageNavigation.xaml", UriKind.Relative),
items);
this.frame1.NavigationService.LoadCompleted +=
new System.Windows.Navigation.LoadCompletedEventHandler(NavigationService_LoadCompleted);
}
void NavigationService_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
((PageNavigation)e.Content).MessageFromCallingWindow = (List<ExtraDataObject>)e.ExtraData;
}
PageNavigation.xaml
<Page x:Class="WpfFrameNavigation1.PageNavigation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfFrameNavigation1"
DataContext ="{Binding RelativeSource={RelativeSource Self}}"
mc:Ignorable="d"
Title="PageNavigation">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Height="24" Grid.Row="0" Click="Button_Click">Text</Button>
<DataGrid x:Name="MyDatagrid" Grid.Row="1"
AutoGenerateColumns="True" Height="447" HorizontalAlignment="Left" Margin="20,85,0,0"
VerticalAlignment="Top" Width="799"
DataContext ="{Binding RelativeSource={RelativeSource Self}}"
ItemsSource="{Binding Path=MessageFromCallingWindow}" CanUserAddRows="False">
</DataGrid>
</Grid>
</Page>
PageNavigation.xaml.cs
public partial class PageNavigation : Page
{
public static DependencyProperty MessageFromCallingWindowProperty = DependencyProperty.Register(
"MessageFromCallingWindow", typeof(List<ExtraDataObject>), typeof(PageNavigation),
new FrameworkPropertyMetadata(
null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public List<ExtraDataObject> MessageFromCallingWindow
{
get { return (List<ExtraDataObject>)GetValue(MessageFromCallingWindowProperty); }
set { SetValue(MessageFromCallingWindowProperty, value); }
}
public PageNavigation()
{
InitializeComponent();
this.MyDatagrid.ItemsSource = MessageFromCallingWindow;
this.MyDatagrid.Items.Refresh();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
foreach (ExtraDataObject element in MessageFromCallingWindow)
{
Console.WriteLine(element.Rank);
}
this.MyDatagrid.ItemsSource = MessageFromCallingWindow;
this.MyDatagrid.Items.Refresh();
}
}