I tienen una ventana WPF con un modelo de vista establecer como su DataContext, y tienen un ListBox con un DataTemplate y su ItemsSource unido al modelo de vista, como en el siguiente ejemplo:En WPF, ¿cómo enlazar datos con Window DataContext desde el DataTemplate de un ListBox contenido?
Ver modelo:
using System.Collections.Generic;
namespace Example
{
class Member
{
public string Name { get; set; }
public int Age { get; set; }
}
class Team
{
private List<Member> members = new List<Member>();
public string TeamName { get; set; }
public List<Member> Members { get { return members; } }
}
}
MainWindow.xaml:
<Window x:Class="Example.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:Example"
Title="Example" Height="300" Width="300" Name="Main">
<Window.DataContext>
<l:Team TeamName="The best team">
<l:Team.Members>
<l:Member Name="John Doe" Age="23"/>
<l:Member Name="Jane Smith" Age="20"/>
<l:Member Name="Max Steel" Age="24"/>
</l:Team.Members>
</l:Team>
</Window.DataContext>
<ListBox ItemsSource="{Binding Path=Members}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=TeamName}" Margin="4"/>
<TextBlock Text="{Binding Path=Name}" Margin="4"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Window>
por supuesto, la propiedad teamname de la clase de equipo no se muestra en los artículos ListBox porque cada elemento de la LisBox es el DataContext de la List.ItemTemplate, y se anula t El DataContext de la ventana.
La pregunta es: ¿Cómo puedo enlazar datos con la propiedad TeamName del modelo de vista (Window.DataContext) desde el DataTemplate de ListBox?
1. Por supuesto! No había pensado en compartir el modelo de visualización como un recurso. Estaba intentando complicar las definiciones con RelativeSources y FindAncestor sin éxito. –
Vaya, lo votaría si tuviera suficiente reputación. –