0

WPF で ListBox を作成しました。これは次のことを行います。

ViewModel の DataSource にバインドします。ListBox には項目が含まれ、各項目の横には CheckBox があります。ユーザーが CheckBox をクリックすると、アイテムが選択され、コマンドが実行されます。正常に動作し、WPF のコードは次のようになります。

    <ListBox ItemsSource="{Binding OCAntwort}" SelectedItem="{Binding SelectedAntwort}" >
        <ListBox.Resources>
            <Style TargetType="ListBoxItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBoxItem">
                            <Grid>
                                <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition/>
                                </Grid.ColumnDefinitions>

                                    <!--ElementName=Window is the Name of the XAML (in root definition)-->
                                    <CheckBox DataContext="{Binding DataContext, ElementName=Window}" Command="{Binding CheckAnswer}" CommandParameter="{Binding ElementName=cbox, Path=IsChecked}" IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsSelected}" x:Name="cbox" HorizontalAlignment="Right"/>
                                </Grid>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListBox.Resources>
    </ListBox>

今、私はWindowsストアアプリで同じことを試みていますが、AncestorTypeはありません...私がこのようにやっている場合:

<Style TargetType="ListBoxItem" x:Name="lbitem">

<CheckBox DataContext="{Binding DataContext, ElementName=Window}" Command="{Binding CheckAnswer}" CommandParameter="{Binding ElementName=cbox, Path=IsChecked}" IsChecked="{Binding ElementName=lbitem, Path=IsSelected}" x:Name="cbox" HorizontalAlignment="Left"/>

チェックボックスが消えて、OCAntwort の ItemsSource だけが表示されます。項目をクリックしても、CheckBox の Command は実行されません (CheckBox がないため)。次のようにします。

IsChecked="{Binding ElementName=lbitem, Path=IsSelected,RelativeSource={RelativeSource Mode=Self}}"

CheckBox を表示して Command を実行しますが、SelectedItem にバインドされていません。

CheckBox (各 ListBoxItem の ListBoxItem の横に表示されている) を ListBox の SelectedItem にバインドするにはどうすればよいですか? 作業コードは上記のとおりです... コードが Windows ストア アプリ (および後で Windows Phone アプリ) で機能することを望みます。

例:

ここからサンプルをダウンロードできます: http://weblogs.asp.net/marianor/archive/2008/02/04/multiselect-listview-with-checkboxes-in-wpf.aspx

これは、Windows ストア アプリで達成したいことを示しています。

編集: このようにすると、コンテンツと CheckBox を含む ListBox が表示されますが、SelectedItem で CheckBox をバインドする必要があります。ユーザーが CheckBox をクリックした場合、ListBoxItem を選択する必要があります。または、ユーザーが ListBoxItem をクリックした場合、CheckBox を選択する必要があります。

    <ListBox ItemsSource="{Binding OCAntwort}" SelectedItem="{Binding SelectedAntwort}" Grid.Row="2" Grid.Column="1" x:Name="listBox" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Text}" Width="150" VerticalAlignment="Center"/>
                    <CheckBox IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsSelected, Mode=TwoWay}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
4

2 に答える 2