2011-03-31 24 views
0

我在WP7應用程序中使用mvvm燈。我有一個包含對象集合的itemsource的列表框。 列表框的ItemTemplate DataTemplate包含一個按鈕。該按鈕包含一個顯示綁定對象屬性的文本塊。如何將命令分配給按鈕而不改變datacontext的文本塊或CommandParameter獲取項目綁定到itemtemplate?如何設置ButtonBaseExtensions.Command DataContext,而不是更改按鈕的上下文

<ListBox x:Name="listBox" ItemsSource="{Binding Main.SomeCollection}" > 
    <ListBox.ItemTemplate> 
      <DataTemplate> 
      <Button 
       Command:ButtonBaseExtensions.Command="{Binding Main.MyCommand}" 
       Cmmand:ButtonBaseExtensions.CommandParameter="{Binding}" /> 
        <TextBlock Text="{Binding Title}"/> 
      </Button> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
</ListBox> 

感謝

回答

3

你需要去對命令所在的DataContext參考。在MVVM Light中,我們通常通過ViewModelLocator執行此操作。由於ViewModelLocator公開爲全球資源(在App.xaml中),你可以這樣做:

命令=「{結合Main.MyCommand源= {靜態資源定位符}}」

當然你也可以在Blend中做到這一點。

乾杯, Laurent

+0

是的,固定綁定。如何在混合? #1,它在一個數據模板中,#2我在Blend中沒有看到命令道具。 – Roger 2011-03-31 22:11:47

+0

對不起,我應該更精確。在Windows Phone 7中,ButtonBaseExtensions的附加屬性不幸地不可混合。使用Blend綁定編輯器可以用於WPF,Silverlight 4(本機知道Command屬性的兩個版本的框架)。在Windows Phone 7中,如果您想要可混合性,您可以使用EventToCommand組件(來自MVVM Light Extras DLL)附加到Button的Click事件,然後您具有完全的可混合性。乾杯! – LBugnion 2011-04-01 09:36:49

+0

@LBugnion對不起,老主題。問題是,如果我使用viewmodel的名稱(並且viewmodel不是singletone:我將參數傳遞給定位器中的構造函數),它將調用viewmodel的構造函數來獲取列表中的每個項目,該項目包含該命令。任何解決方法?實際上,它很明顯的行爲,但以防萬一.. – 2013-04-29 19:20:08

相關問題