2010-10-29 61 views
2

我有一個很奇怪的問題。在我的WP7應用程序中,我有一個透視控件和一個定義在其中的項目模板(或者在資源中,我已經嘗試了兩種方式,但仍然是相同的問題)。在模板中,我定義了一個EventToCommand定義的按鈕(EventName =「Click」)。我也在Pivot外面有相同的複製粘貼按鈕。問題是,按鈕,這是在樞軸以外的工作正常,但其中一個不起作用。其實我已經注意到,我的樞軸內的任何命令不起作用。我正確處理ViewModel中的命令,因爲同一個按鈕,但在數據透視之外效果很好。 任何想法可能是什麼問題?請幫助。 在此先感謝。 乾杯。MVVM Light EventToCommand在WP7 Pivot DataTemplate中不起作用

P.S.我的代碼是非常標準的,但萬一這裏是:

<controls:Pivot Grid.Row="0" 
     x:Name="PivotControl" 
     Title="{Binding ApplicationTitle}"       
     ItemsSource="{Binding BlaBla}"> 

 <controls:Pivot.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <Button Content="Click Me"> 
         <i:Interaction.Triggers> 
          <i:EventTrigger EventName="Click"> 
           <cmd:EventToCommand Command="{Binding MyCommand, Mode=OneWay}" CommandParameterValue="Test"/> 
          </i:EventTrigger> 
         </i:Interaction.Triggers> 
        </Button> 
      ... 

而且視圖模型代碼:

public RelayCommand<string> MyCommand 
    { 
     get; 
     private set; 
    } 
//And in the constructor ... 
MyCommand= new RelayCommand<string>((param) => HandleTheCommand(param)); 

...

比ks再次。

回答

1

silverlight/WP7的問題是數據上下文不在模板中繼承。在使用反射器挖掘MVVM lite代碼庫之後,我發現有一個很好的技巧可以使它工作。基本上不是在原始場景中公開ICommand,而是公開類型Binding的依賴項屬性。然後,任何實體都可以綁定到此屬性,因爲Binding可以從可視化樹中評估數據上下文。然後創建一個可觀察的綁定類,它基本上具有綁定到TriggerAction類的依賴項屬性的綁定的隱藏附加屬性。現在您需要做兩件事: 1.在TriggerAction類中,如果綁定DP更改,請更新ObservableBinding成員 2.在ObserableBinding類中,如果隱藏DP更改,則評估並存儲新值。

我希望能夠解決您的問題。

5

由於您位於控件的ItemTemplate中,因此您綁定的DataContext不是您的ViewModel。綁定{Binding MyCommand, OneWay}正試圖從集合BlaBla的對象上找到屬性MyCommand。這是命令模式的侷限之一,在DataTemplates中你的DataContext通常不是你的ViewModel。

真的沒有什麼好方法。您可以將您的命令包含在BlaBla集合中的對象中。您也可以調整自己的觸發器,在VisualTree中搜索ViewModel,然後通過反射而不是實際綁定來檢索命令。

+0

謝謝史蒂芬,真的很好的答案。乾杯。 – Tech0 2010-10-29 18:06:32

相關問題