0

WP7(Silverlight 3)でアプリを作成しています。私はこのようなビューモデルを持っています

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

ページのデータコンテキストがビューモデルに設定されており、アイテムソースがActivityTypesコレクションに設定されたリストボックスがあります。リストボックスで、コマンドがビューモデルのLoadActivityプロパティにバインドされているボタンのリストをレンダリングしようとしています。RelayCommandは、それが何であるか疑問に思っている場合に備えて、MVVMLightツールキットの一部です。

私が抱えている問題は、リストボックスのitemsourceがActivitytypesコレクションに設定されており、このプロパティが親にあるため、ボタンコマンドをLoadActivityプロパティにバインドする方法が見つからないことです。FindAncesterについて読みましたが、Silverlight3でサポートされているようには見えません。

私の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 リンクとして) 設定すると、機能します。

xaml の親オブジェクトへのバインドをご覧ください。

于 2012-12-29T13:35:59.693 に答える