У меня есть DataTemplate
для ListBox
, где у меня есть несколько элементов управления, которые привязываются к элементу. Я также хотел бы связать со значением на LayoutRoot.DataContext
. Я не уверен, как это сделать.
<!--LayoutRoot is the root grid where all page content is placed-->
<StackPanel x:Name="LayoutRoot" Background="Transparent">
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding}" />
<TextBlock Text="{Binding ElementName=LayoutRoot, Path=DataContext.Foo}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
public partial class MainPage : PhoneApplicationPage
{
public string Foo
{
get
{
return "the moon";
}
}
private int startIndex = 1;
private IList<string> _data = new List<string>() { "foo", "bar", "baz" };
public IList<string> Items
{
get
{
return _data;
}
}
// Constructor
public MainPage()
{
InitializeComponent();
LayoutRoot.DataContext = this;
}
}
Это не работает; отображаются только элементы _data
. Следующие ошибки привязки появляются в выходных данных отладки:
System.Windows.Data Error: BindingExpression path error: 'Foo' property not found on 'foo' 'System.String' (HashCode=1502598398). BindingExpression: Path='DataContext.Foo' DataItem='System.Windows.Controls.Border' (HashCode=78299055); target element is 'System.Windows.Controls.TextBlock' (Name=''); target property is 'Text' (type 'System.String')..
System.Windows.Data Error: BindingExpression path error: 'Foo' property not found on 'bar' 'System.String' (HashCode=696029481). BindingExpression: Path='DataContext.Foo' DataItem='System.Windows.Controls.Border' (HashCode=78298703); target element is 'System.Windows.Controls.TextBlock' (Name=''); target property is 'Text' (type 'System.String')..
System.Windows.Data Error: BindingExpression path error: 'Foo' property not found on 'baz' 'System.String' (HashCode=696029489). BindingExpression: Path='DataContext.Foo' DataItem='System.Windows.Controls.Border' (HashCode=78298694); target element is 'System.Windows.Controls.TextBlock' (Name=''); target property is 'Text' (type 'System.String')..
Есть ли где-нибудь синтаксическая ошибка?
Обновление Я стремлюсь к чему-то похожему на это:
- Foo
- Луна
- бар
- Луна
- Баз
- Луна
Вместо этого все, что я получаю, это:
(я использую Silverlight для Windows Phone 7.)