Связать за пределами 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;