Связать за пределами ItemsSource of DataTemplate, Windows phone

В моем Windows Phone 8 для этого указаны LongListSelector и ItemTemplate. В коде позади я установил ItemsSource для этого LongListSelector. В шаблоне элемента я хочу связать значение с внешним ItemsSource. Как это сделать?

<DataTemplate x:Key="template">
  <TextBlock Text="{Binding name}"/>
  <TextBlock Text="{Binding country}"/>
</DataTemplate>
...
<phone:LongListSelector x:Name="list" ItemTemplate="{StaticResource template}">
</phone:LongListSelector>

C#

string country = "Japan";
this.list.ItemsSource = items;

Итак, как связать страну с внешним ресурсом ItemsSource? Страна является аксессором в моем "code code" phoneApplicationPage.

1 ответ

Было бы лучше, если бы вы делали свои модели так, чтобы внутри шаблона вы привязывались только к этой модели элементов.

В любом случае можно связать и вне itemSource:

XAML:

<phone:PhoneApplicationPage.Resources>

    <DataTemplate x:Key="ItemTemplate">
        <StackPanel>
            <TextBlock Text="{Binding Name}"/>

            <!-- this binds to the layoutRoot's dataContext, which can be setted to be "code behind" -->
            <TextBlock Text="{Binding DataContext.Outside, ElementName=LayoutRoot}"/>
        </StackPanel>
    </DataTemplate>
</phone:PhoneApplicationPage.Resources>

<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot">
    <phone:LongListSelector ItemsSource="{Binding Items}"
                            IsGroupingEnabled="False"
                            ItemTemplate="{StaticResource ItemTemplate}">

    </phone:LongListSelector>
</Grid>

В CS у вас есть, конечно, свойства:

public ObservableCollection<Model> Items{get; set;}
public string Outside { get; set; }

Также текст данных layoutRoot должен быть установлен где-то в cs:

LayoutRoot.DataContext = this;
Другие вопросы по тегам