从DataTemplate中的DataTemplate中引用ViewModel DataContext

时间:2013-08-16 03:18:13

标签: silverlight windows-phone-7 xaml mvvm windows-phone-8

我发现自己有点绑定......绑定......呵呵......(跛脚)

无论如何......我需要引用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>

1 个答案:

答案 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的编辑器上编码。可能会有一些缺失的字符...