0

コードでチェックボックスがどれだけチェックされているかを知りたい:

 <Grid Width="440" >

<ListBox Name="listBoxZone" ItemsSource="{Binding TheList}"  Background="White" Margin="0,120,2,131">  
      <ListBox.ItemTemplate>
            <HierarchicalDataTemplate>
  <CheckBox Name="CheckBoxZone" Content="{Binding StatusName}" Tag="{Binding StatusId}" Margin="0,5,0,0" VerticalAlignment ="Top"   />
             </HierarchicalDataTemplate>
      </ListBox.ItemTemplate>
</ListBox>

      </Grid>

チェックボックスがどれだけチェックされているかを知りたいコードは次のとおりです。

for (int i = 0; i < listBoxZone.Items.Count; i++)
                    {
                        if (CheckBoxZone.IsChecked == true )
                        { 


                        }

                    }
4

2 に答える 2

3

IsCheckedtype のプロパティNullable<bool>( のように記述できます) をデータ項目クラスに追加し、 CheckBox.IsCheckedプロパティbool?を双方向バインドできます。

<CheckBox Name="CheckBoxZone" IsChecked={Binding IsChecked, Mode=TwoWay} ... />

これで、すべてのアイテムを単純に反復して、そのIsChecked状態を確認できます。

int numChecked = 0;
foreach (MyItem item in listBoxZone.Items)
{
    if ((bool)item.IsChecked) // cast Nullable<bool> to bool
    {
        numChecked++;
    }
}

またはLinqを使用:

int numChecked =
    itemsControl.Items.Cast<MyItem>().Count(i => (bool)i.IsChecked);

そして、ちょっとしたメモ: DataTemplateで十分なのに、ListBox で HierarchicalDataTemplate を使用するのはなぜですか?

于 2012-05-16T08:05:11.140 に答える
0

OfTypeLINQの利用方法

int result = 
            listBoxZone.Items.OfType<CheckBox>().Count(i => i.IsChecked == true);

単一のチェックボックス項目またはすべての項目がチェックボックスであっても機能するため、OfType代わりに使用しました。CastOfType

その場合Cast、1つでもチェックボックスが入っていないとエラーになります。

于 2012-05-16T08:38:07.240 に答える