我正在WP7(Silverlight 3)中编写应用程序。我有一个看起来像这样的视图模型
public class MainViewModel
{
public List<ActivityTypes> ActivityTypes{get;set;}
public RelayCommand LoadActivity{get;set;}
}
我的页面datacontext设置为视图模型,我有一个列表框,其项目源设置为ActivityTypes集合。在列表框中,我正在尝试呈现一个按钮列表,这些按钮的命令绑定到viewmodel上的LoadActivity属性。如果您想知道它是什么,RelayCommand是MVVM Light工具包的一部分。
我遇到的问题是我无法找到将我的button命令绑定到LoadActivity属性的方法,因为我的列表框将其itemsource设置为Activitytypes集合,并且此属性位于父级中。我已经阅读了FindAncester,但它看起来并不像Silverlight 3中那样。
我的XAML看起来像这样
<UserControl.Resources>
<DataTemplate x:Key="ActivityTypeListTemplate">
<StackPanel>
<Button Command="{Binding LoadActivity}"> <!--binding not found as we're in the collection-->
<TextBlock Text="{Binding Name}" FontSize="50"/>
</Button>
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}">
<ListBox Margin="0" ItemsSource="{Binding ActivityTypes}" ItemTemplate="{StaticResource ActivityTypeListTemplate}"/>
</Grid>
对这样的代码进行编码的最佳方法是什么?
答案 0 :(得分:1)
没有“直接”的方法来做到这一点。您可以将Buttons DataContext设置为MainViewModel(最好是作为StaticResource链接)并且它可以工作。