Привязка данных к DataGrid показывается только нажатием кнопки и назначением вручную. Данные передаются из NavigationService - PullRequest
0 голосов
/ 05 марта 2020

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

Но в качестве небольшого приложения будет проще выполнить миграцию позже, когда я смогу выбрать что-то, с чем лучше всего работать. 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();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...