2011-06-28 75 views
0

將我的命令綁定到ItemsControl中的按鈕時出現錯誤。Silverlight的相對綁定命令WP7

這是我的代碼:

<phone:PhoneApplicationPage.DataContext> 
    <ViewModel:MyViewModel /> 
</phone:PhoneApplicationPage.DataContext> 

有:

<ItemsControl ItemsSource="{Binding MyList}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button Content="Test" 
       cmd:ButtonBaseExtensions.Command="{Binding MyViewModel.TestCommand}" 
       cmd:ButtonBaseExtensions.CommandParameter="{Binding}"/> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

我也得到:

System.Windows.Data Error: BindingExpression path error: 'MyViewModel' property not found on '...' '...' (HashCode=77119633). BindingExpression: Path='MyViewModel.ChooseCommand' DataItem='...' (HashCode=77119633); target element is 'System.Windows.Controls.Button' (Name=''); target property is 'Command' (type 'System.Windows.Input.ICommand').. 

當然,我應該用一個絕對的約束力還是一個相對,但我不知道該怎麼做。

預先感謝任何幫助

回答

1

Button是必然youur MyList屬性,我猜是一個列表或者一些IEnumerable類型的ItemsControl內。每個ButtonDataContext將是它所代表的MyList內的項目。

如果要將按鈕綁定到頂層視圖模型,則需要某種相對源綁定,Silverlight(3)不支持這種綁定。

我創建了一個相對的發射源的Silverlight這裏結合置換:

http://www.scottlogic.co.uk/blog/colin/2009/02/relativesource-binding-in-silverlight/

然而,對於WP7,其中性能真的很重要,我不會用它!

爲什麼不簡單地在你的視圖模型中創建你需要的關係?即對於MyList(我們稱之爲MyListItem)中的每個項目,公開一個指向父視圖模型的屬性。換句話說,有一個MyListItem.Parent屬性指向MyViewModel

+0

好主意,它有點不舒服^^但它的工作,謝謝 – Tim