我有一個WPF窗口與設置爲其DataContext的視圖模型,並與一個DataTemplate和其的ItemsSource列表框綁定到視圖模型,如在下面的例子:在WPF中,如何從包含ListBox的DataTemplate中將數據綁定到Window DataContext?
查看模型:
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>
當然,團隊一流的TeamName屬性不會因爲LisBox的每一個項目是List.ItemTemplate的DataContext的顯示在列表框中的項目,它將覆蓋ŧ他窗口的DataContext。
問題是:如何從列表框的DataTemplate中綁定到視圖模型(Window.DataContext)的TeamName屬性?
+1。當然了!我沒有想過將視圖模型作爲一個資源共享,我試圖用RelativeSources和FindAncestor使事情複雜化,但沒有成功。 – 2009-12-25 00:38:09
糟糕,如果我有足夠的聲望,我會爲您投票 – 2009-12-25 00:40:17