WP7 XAML绑定到父级中的属性

时间:2012-12-29 12:45:09

标签: silverlight windows-phone-7 data-binding

我正在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>

对这样的代码进行编码的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

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

查看Bind to parent object in xaml