Вот схема одного из способов переноса данных. Работа с этим примером будет поучительной, потому что вам нужно будет использовать CPAN , вы узнаете о полезных List::Util
и List::MoreUtils
модулях , вы узнаете основы сложных структур данных (см. perlreftut , perldsc и perllol ), и вы сможете использовать итератор в Perl.
use strict;
use warnings;
use List::MoreUtils qw(each_arrayref);
my @raw_data = (
'0 1 2 3 4 5 6 7 8 9 10',
'6 7 3 6 9 3 1 5 2 4 6',
);
my @rows = ... ; # Look up map() and split() to fill in the rest.
# You want an array of arrays.
my @transposed; # You will build this in the loop below.
my $iter = each_arrayref(@rows); # See List::MoreUtils documentation.
while ( my @tuple = $iter->() ){
# Do stuff here to build up @transposed, which
# will also be an array of arrays.
}
вы можете использовать [] в путях привязки для ссылки на индекс
в вашем коде
//you can only bind to public properties
public List<Person> People { get; set; }
в вашем XAML
<Label Text="{Binding People[10].Name}" />
Есть несколько способов сделать это.
Одним из способов может быть создание комбинированного списка и назначение списка как ItemsSource
. Затем вы можете сделать некоторые метки и ввести и назначить выбранного человека в поле со списком как DataContext
для окна.
Скажем, например, что это XAML:
<ComboBox x:Name="personCombobox" HorizontalAlignment="Left" SelectionChanged="personCombobox_OnSelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName, Mode=OneWay}" />
<TextBlock Text=" - " />
<TextBlock Text="{Binding LastName, Mode=OneWay}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Label Content="{Binding FirstName, Mode=OneWay}"/>
<Label Content="{Binding LastName, Mode=OneWay}" />
И тогда код будет выглядеть примерно так:
public MainWindow()
{
InitializeComponent();
personCombobox.ItemsSource = personRepository.GetAll();
personCombobox.SelectedIndex = 0;
}
private void personCombobox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (personCombobox.SelectedIndex != -1)
{
this.DataContext = (Person)personCombobox.Items.GetItemAt(personCombobox.SelectedIndex);
}
}