[Silverlight][WPF][C#] 使用LINQ取得已勾選的CheckBox

  • 7879
  • 0
  • C#
  • 2013-07-14

通常如果在應用程式裡要以程式取得被勾選的CheckBox有哪些,一般應該都會放個迴圈下去跑,把所有的CheckBox爬過一次,逐一比對是不是有被勾選,不過,有個更簡單的方式!!
用LINQ!!

 

通常如果在應用程式裡要以程式取得被勾選的CheckBox有哪些,一般應該都會放個迴圈下去跑,把所有的CheckBox爬過一次,逐一比對是不是有被勾選,不過,有個更簡單的方式!!

用LINQ!!

這次直接用小小的Silverlight範例來介紹,順便當練習吧!!

 

MainPage.xaml
<UserControl xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"  x:Class="SL_FindControlsByLinq.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:theme="clr-namespace:System.Windows.Controls.Theming;assembly=System.Windows.Controls.Theming.ExpressionDark"
    mc:Ignorable="d"
    d:DesignHeight="600" d:DesignWidth="800">
    <theme:ExpressionDarkTheme>
 
        <Grid x:Name="LayoutRoot" Background="Transparent" Margin="20">
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition Height="32"></RowDefinition>
            </Grid.RowDefinitions>
            <toolkit:WrapPanel Name="wrpContainer" >
                <CheckBox Content="CheckBox1" Height="16" Name="checkBox1" Margin="20" FontSize="14" />
                <CheckBox Content="CheckBox2" Height="16" Name="checkBox2" Margin="20" FontSize="14" />
                <CheckBox Content="CheckBox3" Height="16" Name="checkBox3" Margin="20" FontSize="14" />
                <CheckBox Content="CheckBox4" Height="16" Name="checkBox4" Margin="20" FontSize="14"/>
                <CheckBox Content="CheckBox6" Height="16" Name="checkBox6" Margin="20" FontSize="14" />
                <CheckBox Content="CheckBox7" Height="16" Name="checkBox7" Margin="20" FontSize="14" />
                <CheckBox Content="CheckBox8" Height="16" Name="checkBox8" Margin="20" FontSize="14" />
                <CheckBox Content="CheckBox9" Height="16" Name="checkBox9" Margin="20" FontSize="14" />
                <CheckBox Content="CheckBox10" Height="16" Name="checkBox10" Margin="20" FontSize="14" />
            </toolkit:WrapPanel>
            <Button Name="btnGetCheckedItems" Grid.Row="1" Content="GetCheckedItems" HorizontalAlignment="Center" 
		Padding="5" Click="btnGetCheckedItems_Click" FontSize="14" />
        </Grid>
    </theme:ExpressionDarkTheme>
 
</UserControl>

 

MainPage.xaml.cs
using System.Linq;
using System.Windows;
using System.Windows.Controls;
 
namespace SL_FindControlsByLinq
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }
 
        private void btnGetCheckedItems_Click( object sender , RoutedEventArgs e )
        {
            var checkedItems = wrpContainer.Children.OfType<CheckBox>().Where( c => c.IsChecked == true );
 
            MessageBox.Show( string.Format( "有 {0} 個項目已被選取" , checkedItems.Count().ToString() ) );
        }
    }
}

沒錯!!用LINQ來完成這件事就是這麼的簡單,要取得有幾個CheckBox被勾選只要一行的程式碼!!當然,還有更多其他的應用方式!!所以~忘掉落落長的迴圈吧!!信LINQ得永生!!!!

 

執行出來的結果如下:

 

最後一樣奉上專案原始碼,請自行服用: