0

我正在用 WP7 (Silverlight 3) 编写应用程序。我有一个看起来像这样的视图模型

public class MainViewModel
{
   public List<ActivityTypes> ActivityTypes{get;set;}
   public RelayCommand LoadActivity{get;set;}
}

我的页面数据上下文设置为视图模型,并且我有一个列表框,其项目源设置为 ActivityTypes 集合。在列表框中,我试图呈现一个按钮列表,这些按钮的命令绑定到视图模型上的 LoadActivity 属性。如果您想知道它是什么,RelayCommand 是 MVVM Light 工具包的一部分。

我遇到的问题是我找不到将按钮命令绑定到 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>

编写这样的代码的最佳方法是什么?

4

1 回答 1

1

没有“直接”的方法可以做到这一点。您可以将 Buttons DataContext 设置为 MainViewModel(最好作为 StaticResource 链接)并且它会起作用。

看看Bind to parent object in xaml

于 2012-12-29T13:35:59.693 回答