Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En un escenario sencillo de maestro y detalle, tiene un enlazador de datos como ItemsControl, como ListBox. En función de la selección de usuario, se muestra más información sobre el elemento seleccionado. En este ejemplo se muestra cómo implementar este escenario.
Ejemplo
En este ejemplo, People
es ObservableCollection<T> de la clase Person
. Esta Person
clase contiene tres propiedades: FirstName
, LastName
y HomeTown
, todo de tipo string
.
<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>
El ContentControl usa el siguiente DataTemplate que define cómo se presenta la información de un Person
:
<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 continuación se muestra una captura de pantalla de lo que genera el ejemplo. El ContentControl muestra las demás propiedades de la persona seleccionada.
Las dos cosas que se deben observar en este ejemplo son:
ListBox y ContentControl enlazan al mismo origen. No se especifican las Path propiedades de ambos enlaces porque ambos controles están enlazando a todo el objeto de colección.
Debe establecer la propiedad IsSynchronizedWithCurrentItem en
true
para que funcione. Establecer esta propiedad garantiza que el elemento seleccionado siempre se establezca como CurrentItem. Como alternativa, si ListBox obtiene sus datos de un CollectionViewSource, sincroniza automáticamente la selección y el curso.
Tenga en cuenta que la Person
clase invalida el ToString
método de la siguiente manera. De forma predeterminada, ListBox llama a ToString
y muestra una representación en forma de cadena de cada objeto en la colección enlazada. Por eso cada Person
aparece como nombre de pila en el ListBox.
public override string ToString()
{
return firstname.ToString();
}
Public Overrides Function ToString() As String
Return Me._firstname.ToString
End Function
Consulte también
.NET Desktop feedback