Nasıl yapılır: Koleksiyona Bağlama ve Seçime Göre Bilgi Görüntüleme

Basit bir ana ayrıntı senaryosunda gibi bir veriye ItemsControl bağlı olur. ListBox Kullanıcı seçimine bağlı olarak, seçilen öğe hakkında daha fazla bilgi görüntülersiniz. Bu örnek, bu senaryonun nasıl uygulandığını gösterir.

Örnek

Bu örnekte, People sınıfların ObservableCollection<T> bir Person örneğidir. Bu Person sınıf üç özellik içerir: , ve türünün FirstNameLastNameHomeTownstring hepsi.

<Window x:Class="SDKSample.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="clr-namespace:SDKSample"
  Title="Binding to a Collection"
  SizeToContent="WidthAndHeight">
  <Window.Resources>
    <local:People x:Key="MyFriends"/>
  </Window.Resources>

  <StackPanel>
    <TextBlock FontFamily="Verdana" FontSize="11"
               Margin="5,15,0,10" FontWeight="Bold">My Friends:</TextBlock>
    <ListBox Width="200" IsSynchronizedWithCurrentItem="True"
             ItemsSource="{Binding Source={StaticResource MyFriends}}"/>
    <TextBlock FontFamily="Verdana" FontSize="11"
               Margin="5,15,0,5" FontWeight="Bold">Information:</TextBlock>
    <ContentControl Content="{Binding Source={StaticResource MyFriends}}"
                    ContentTemplate="{StaticResource DetailTemplate}"/>
  </StackPanel>
</Window>

ContentControl, bir DataTemplate bilgisinin nasıl sun olduğunu tanımlayan Person aşağıdakini kullanır:

<DataTemplate x:Key="DetailTemplate">
  <Border Width="300" Height="100" Margin="20"
          BorderBrush="Aqua" BorderThickness="1" Padding="8">
    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
      </Grid.ColumnDefinitions>
      <TextBlock Grid.Row="0" Grid.Column="0" Text="First Name:"/>
      <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=FirstName}"/>
      <TextBlock Grid.Row="1" Grid.Column="0" Text="Last Name:"/>
      <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=LastName}"/>
      <TextBlock Grid.Row="2" Grid.Column="0" Text="Home Town:"/>
      <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=HomeTown}"/>
    </Grid>
  </Border>
</DataTemplate>

Aşağıda, örneğin ne ürettiğinin ekran görüntüsü ve ardından ve ardından yer alan ekran görüntüsü ve ardından yer alan ekran görüntüsü ve sonra da örnekle ilgili bilgiler ve bilgiler ve bilgiler yer alın ContentControl, seçilen kişinin diğer özelliklerini gösterir.

Binding to a collection

Bu örnekte dikkat etmek gereken iki şey vardır:

  1. ve ListBox aynı kaynak için ContentControl bağlama. Her Path iki denetim de koleksiyon nesnesinin tamamına bağlanıyor olduğundan her iki bağlamanın özellikleri belirtilmez.

  2. Bunun çalışması için IsSynchronizedWithCurrentItem özelliğini true olarak ayarlayabilirsiniz. Bu özelliği ayarlamak, seçilen öğenin her zaman olarak ayarlanmış durumdan emin CurrentItem olun. Alternatif olarak, veri ListBox bir 'den alırsa, CollectionViewSource seçimi ve para birimini otomatik olarak eşitler.

sınıfının yöntemini Person aşağıdaki şekilde geçersiz k olduğunu ToString unutmayın. Varsayılan olarak, ListBoxToString çağrır ve bağlı koleksiyonda her nesnenin dize gösterimini görüntüler. Bu nedenle her Person biri içinde bir ad olarak ListBox görünür.

public override string ToString()
{
    return firstname.ToString();
}
Public Overrides Function ToString() As String
    Return Me._firstname.ToString
End Function

Ayrıca bkz.