我发现自己有点绑定......绑定......呵呵......(跛脚)
无论如何......我需要引用ViewModel的主要属性,但是来自DataTemplate
内部,它本身位于另一个DataTemplate
内......它看起来像RelativeSource
Silverlight允许的模式是:Self和TemplatedParent。并且TemplatedParent不够用。
有什么可以做的吗?
一些代码:
<phone:PanoramaItem>
<phone:LongListSelector Margin="0,-38,-22,2" ItemsSource="{Binding Items}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<common:ItemContentTemplateSelector DataContext="{Binding}" Content="{Binding ItemContent}" HorizontalContentAlignment="Stretch" Margin="12,2,0,4">
<common:ItemContentTemplateSelector.DefaultTemplate>
<DataTemplate>
.....
</DataTemplate>
</common:ItemContentTemplateSelector.DefaultTemplate>
<common:ItemContentTemplateSelector.PhoneNumberTemplate>
<DataTemplate>
<Grid Background="White" Height="102">
<Border x:Name="border">
<TextBlock Text="Call"/>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<!-- BINDING ERROR -->
<i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=DataContext.PhoneCallCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Border>
</Grid>
</DataTemplate>
</common:ItemContentTemplateSelector.PhoneNumberTemplate>
</common:ItemContentTemplateSelector>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</phone:PanoramaItem>
答案 0 :(得分:3)
如果你不想解决方法或轻松做到, 有事可做;
使用StaticResource
看看这个;
MyViewModelClass ViewModel
{
get;set;
}
...ctor()
{
this.ViewModel=new MyViewModelClass();
this.DataContext=this.ViewModel; //We use same VM instance as DataContext as Resource
this.Resoureces.Add("MainVieModel",ViewModel);
InitializeComponents();//...Add resource before this line
}
之后,您可以在任何地方使用ViewModel作为StaticResource;
{Binding Path=Items,Source={StaticResource ViewModel}}
我在stackoverflow的编辑器上编码。可能会有一些缺失的字符...