Tôi có một cửa sổ với một mô hình xem thiết lập như DataContext của WPF, và có một ListBox với một DataTemplate và ItemsSource của nó ràng buộc với mô hình điểm, như trong ví dụ sau:Trong WPF, làm thế nào để databind vào Window DataContext từ bên trong DataTemplate của một ListBox chứa?
Xem mô hình:
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>
Tất nhiên, tài sản TeamName của lớp Đội bóng không được hiển thị trong mục ListBox vì mỗi mục tương ứng của LisBox là DataContext của List.ItemTemplate, và nó sẽ ghi đè t ông DataContext của cửa sổ.
Câu hỏi đặt ra là: Làm cách nào để tôi databind thuộc tính TeamName của mô hình chế độ xem (Window.DataContext) từ bên trong DataBox của ListBox?
1. Dĩ nhiên! tôi đã không nghĩ về việc chia sẻ các mô hình xem như một nguồn lực. tôi đã cố gắng làm phức tạp dindings với RelativeSources và FindAncestor không thành công. –
Rất tiếc, tôi muốn bỏ phiếu bạn lên nếu tôi có đủ uy tín –