2013-08-16 5 views
1

내가 바인딩 ... 바인드 약간의 자신을 발견 ... 도니는 다르게 ... (절름발이) 어쨌든참조 뷰 모델의 DataContext를가

... 나는를 참조해야 기본 ViewModel의 속성이지만 다른 DataTemplate ... 내에있는 DataTemplate 내에서 Silverlight에서 허용하는 모드는 RelativeSource 인 것처럼 보입니다. 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> 

답변

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 
    } 

그런 다음 StaticResource와 동시에 원하는 ViewModel을 사용할 수 있습니다.

{Binding Path=Items,Source={StaticResource ViewModel}} 

나는 stackoverflow의 편집기에서 코딩했습니다. 누락 된 문자가있을 수 있습니다 ...

+0

멋진 해결 방법! 감사! 이 정적 리소스를 XAML에만 추가 할 수 있습니까? –

+0

나는이 해결 방법을 오랫동안 사용해 왔습니다. 이 리소스를 XAML쪽에 추가 하시겠습니까? 네, 그렇게 할 수 있습니다. xaml에 datacontext를 추가 할 수도 있습니다. 뭔가 '' –

+0

코드에서 내 코멘트를 주목해라'// 우리는 samve VM instace ... '를 사용하고있다. xaml 렌더링 순서의 쉬운 원인이 아니라 인스턴스 생성 순서가 http://stackoverflow.com/q/10171630/413032에서 찾아 볼 수 있습니다. 코드 숨김으로 처리하는 것이 더 좋습니다. –

관련 문제