2

リストビューがあり、各アイテムにはItemTemplateの一部としてCheckBoxコントロールがあります。

<ListView x:Name="taskListView" Grid.Row="2" BorderThickness="0" Margin="30,0,0,0" ItemsSource="{Binding ChildItems}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="25"/>
                        <ColumnDefinition Width="290"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <CheckBox Grid.Column="0" HorizontalAlignment="Center"></CheckBox>
                    <TextBlock Text="{Binding Name}" MaxWidth="270" Grid.Column="1" Margin="0,0,10,0"/>
                    <ComboBox SelectedItem="{Binding DependentTask, Mode=TwoWay}" 
                              Grid.Column="2"
                              Margin="0,3,0,3"
                              ItemsSource="{Binding DependentTasks, Converter={StaticResource addEmptyItemConverter}}" 
                              HorizontalAlignment="Left"
                              MinWidth="150"
                              DisplayMemberPath="ProjectionTaskLink.Name"/>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

このListViewには、チェックボックスもある親があります。その親のチェックボックスがオンになっている場合、ListViewItemsのすべてのチェックボックスをオンにします。親の状態に応じてチェック済みまたはチェックなしに設定できるように、Codebehindでそれらを取得するにはどうすればよいですか?

ありがとう。

編集:これが完全なXAMLです:

<Grid Margin="0,10,0,0">
    <Grid.RowDefinitions>
        <RowDefinition Height="25"/>
        <RowDefinition Height="20"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid Grid.Row="0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="25"/>
            <ColumnDefinition Width="400"/>
            <ColumnDefinition Width="35"/>
            <ColumnDefinition Width="35"/>
        </Grid.ColumnDefinitions>
        <CheckBox HorizontalAlignment="Center" Grid.Column="0" Checked="CheckBox_Checked"/>
        <TextBlock Text="{Binding Name}" Grid.Column="1"/>
        <TextBlock Text="Loops " Grid.Column="2" TextAlignment="Center"/>
        <TextBox Text="{Binding Scenarios}" Grid.Column="3"/>
    </Grid>
    <TextBlock Visibility="{Binding ContainsProjectionTasks, Converter={StaticResource boolToVisibilityConverter}}" 
                   HorizontalAlignment="Left" 
                   Width="450" 
                   TextAlignment="Right" 
                   VerticalAlignment="Bottom" 
                   Grid.Row="1" 
                   Text="Task Dependencies" 
                   Background="White"/>
    <ListView x:Name="taskListView" Grid.Row="2" BorderThickness="0" Margin="30,0,0,0" ItemsSource="{Binding ChildItems}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="25"/>
                        <ColumnDefinition Width="290"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <CheckBox Grid.Column="0" HorizontalAlignment="Center"></CheckBox>
                    <TextBlock Text="{Binding Name}" MaxWidth="270" Grid.Column="1" Margin="0,0,10,0"/>
                    <ComboBox SelectedItem="{Binding DependentTask, Mode=TwoWay}" 
                              Grid.Column="2"
                              Margin="0,3,0,3"
                              ItemsSource="{Binding DependentTasks, Converter={StaticResource addEmptyItemConverter}}" 
                              HorizontalAlignment="Left"
                              MinWidth="150"
                              DisplayMemberPath="ProjectionTaskLink.Name"/>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>
4

4 に答える 4

1

ChildItemsの要素にINotifyPropertyChangedを実装させます。

IsCheckedと呼ばれる要素にプロパティを追加します。これにより、セッターでNotifyPropertyChangedEventが発生します。

ListViewItemのチェックボックスをIsCheckedプロパティにバインドします

親チェックボックスでチェックされたイベントをすでに処理していると仮定します。したがって、ここで行う必要があるのは、これをcodebehindメソッドに追加することだけです。

(foreach YourType item in ChildItems)
    item.IsChecked = parentCheckbox.IsChecked;

または、試してみることができます(parentCheckboxNameはマスターチェックボックスのx:Nameです。

<CheckBox IsChecked="{Binding Path=IsChecked, ElementName=parentCheckboxName}" Grid.Column="0" HorizontalAlignment="Center" />
于 2012-06-06T19:09:57.050 に答える
1

リストビューのitemssourceで、リストビューのチェックボックスのプロパティを作成し、プロパティにバインドします。

次に、親チェックボックスのチェック済みイベントとチェックなしイベントにこのコードを記述できます。

foreach(var item in myItemsSource)
   item.IsChecked=ParentCheckBox.IsChecked.GetValueOrDefault();

幸運を。

于 2012-06-06T19:14:19.893 に答える
0

マークアップで次の2つのチェックボックスをバインドします。

<CheckBox IsChecked="{Binding Path=IsChecked, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type YourAncestorType}}}" Grid.Column="0" HorizontalAlignment="Center" />

ここでコードビハインドを使用する必要はありません。

于 2012-06-06T19:09:48.260 に答える
0

ViewModelの親チェックボックスのIsCheckedプロパティのセッターにあるListViewItemsSourceコレクションを変更するだけで終わりました。これにより、コードビハインドが不要になりました。NotifyPropertyChangedと組み合わせると、現在は機能します。

于 2012-06-06T19:51:31.120 に答える