Silverlight: Binding to a LayoutRoot value from within a DataTemplate

Posted by Rosarch on Stack Overflow See other posts from Stack Overflow or by Rosarch
Published on 2011-01-06T18:38:17Z Indexed on 2011/01/06 18:54 UTC
Read the original article Hit count: 178

Filed under:
|
|
|

I have a DataTemplate for a ListBox, where I have several controls that bind to an item. I would also like to bind to a value on LayoutRoot.DataContext. I'm unsure of how to do this.

<!--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;
    }
}

This doesn't work; only the _data items are displayed. The following binding errors appear in the Debug output:

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')..

Do I have a syntax error somewhere?

Update I'm aiming for something that looks like this:

  • foo
  • the moon
  • bar
  • the moon
  • baz
  • the moon

Instead, all I'm getting is:

  • foo
  • bar
  • baz

© Stack Overflow or respective owner

Related posts about c#

Related posts about Silverlight