Я все еще на начальных этапах изучения WPF и решил попробовать написать довольно простое приложение Contact Browser, чтобы разобраться с основами. Чтобы добавить к сложности, я использую объекты из другого приложения.
До сих пор я был в состоянии успешно привязать элемент управления ListBox к коллекции и отобразить имена контактов. В середине экрана у меня есть StackPanel с CustomControl, который отображает более подробную информацию о контакте. Все это работает на удивление хорошо, за исключением того факта, что объектная модель для контакта скрывает поле PhoneNUmber в коллекции полей.
Как я могу связать / вызвать определенный элемент в коллекции коллекции связанных объектов?
Вот некоторые из моих XAML, во-первых, главное окно ContactWindow:
<DockPanel Width="auto" Height="auto" Margin="8 8 8 8">
<Border Height="56" HorizontalAlignment="Stretch" VerticalAlignment="Top" BorderThickness="1" CornerRadius="8" DockPanel.Dock="Top" Background="Beige">
<TextBox Height="32" Margin="23,5,135,5" Text="Search for contact here" FontStyle="Italic" Foreground="#FFAD9595" FontSize="14" BorderBrush="LightGray"/>
</Border>
<ListBox x:Name="contactList" DockPanel.Dock="Left" Width="192" Height="auto" Margin="5 4 0 8" ItemsSource="{Binding}" DisplayMemberPath="FullName" />
<Grid DataContext="{Binding ElementName=contactList, Path=SelectedItem}">
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="0.125*" />
</Grid.RowDefinitions>
<local:BasicContactCard Margin="8 8 8 8" />
<Button Grid.Row="1" x:Name="exit" Content="Exit" HorizontalAlignment="Right" Width="50" Height="25" Click="exit_Click" />
</Grid>
</DockPanel>
А вот XAML для карты BasicContactCard:
<DockPanel Width="auto " Height="auto" Margin="8,8,8,8" >
<Grid Width="auto" Height="auto" DockPanel.Dock="Top">
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<TextBlock x:Name="companyField" Grid.Row="0" Width="auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="8,8,8,8" Text="{Binding Company}" FontWeight="Bold" FontSize="15" />
<TextBlock x:Name="contactField" Grid.Row="1" Width="auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="8,8,8,8" Text="{Binding FullName}" FontWeight="Bold" />
<TextBlock x:Name="phoneField" Grid.Row="2" Width="auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="8,8,8,8" Text="{Binding Phone}"/>
<TextBlock x:Name="emailField" Grid.Row="3" Width="auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="8,8,8,8" Text="{Binding ValidEmailAddress}"/>
</Grid>
</DockPanel>
Все элементы внутри BasicContactCard, за исключением Phone, предоставляются в качестве свойств для получения из объекта коллекции Contact, с которым связан Listbox, за исключением Phone, который находится в коллекции объектов Field, которые можно вызывать в C # как
Contact c = contacList[i];
string val = c.ContactFields.Item("Phone",FieldNameType.Alias);
Надеюсь, все это имеет смысл! Любая помощь или указатели на ресурсы будут очень благодарны!
Viv