如何在Windows Phone 7的列表框中动态选中复选框?

时间:2014-07-16 17:07:33

标签: windows-phone-7

我有四个复选框项目的列表框。如果我将输入设为2,则应选择前两个复选框,这应该以编程方式进行。

请帮帮我..

谢谢,

.xaml page

 <StackPanel Background="White" Margin="5,0,5,0">
        <ListBox x:Name="listBox2"   Foreground="Black"  Height="300" SelectionMode="Multiple" SelectionChanged="listBox2_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                    <StackPanel Name="stackpanel1" Orientation="Horizontal" >

                            <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Content="{Binding Name}" Foreground="Black" Height="68" Margin="0,-15,0,-10" BorderThickness="0" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked">

                        </CheckBox>
                                                      </StackPanel>
                        <Rectangle Fill="Gray" Height=".5" HorizontalAlignment="Stretch" Width="440" />
                    </StackPanel>

                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>

.cs代码:

  List<Items> source  = new List<Items>();
        source.Add(new Items() { Name = "Item 1" });
        source.Add(new Items() { Name = "Item 2" });
        source.Add(new Items() { Name = "Item 3" });
        source.Add(new Items() { Name = "Item 4" });
        source.Add(new Items() { Name = "Item 5" });
        source.Add(new Items() { Name = "Item 6" });

   ``    listBox2.ItemsSource = source;

项目类

    public class Items
    {
        public string Name
        {
            get;
            set;
        }            
    }

1 个答案:

答案 0 :(得分:0)

这是一种非常粗暴的方式来做我认为你所描述的事情。它没有直接使用你的大部分代码,但应该让你朝着正确的方向前进。

XAML

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <toolkit:ListPicker SelectionChanged="ListPicker_OnSelectionChanged">
        <toolkit:ListPickerItem>0</toolkit:ListPickerItem>
        <toolkit:ListPickerItem>1</toolkit:ListPickerItem>
        <toolkit:ListPickerItem>2</toolkit:ListPickerItem>
        <toolkit:ListPickerItem>3</toolkit:ListPickerItem>
        <toolkit:ListPickerItem>4</toolkit:ListPickerItem>
    </toolkit:ListPicker>
    <ItemsControl x:Name="TheListBox" Grid.Row="1" >
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Content="{Binding Name}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>

请注意,我使用的是Windows Phone Toolkit(从http://phone.codeplex.com/或nuget获取)

C#

using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Controls;
using Microsoft.Phone.Controls;

public partial class MainPage : PhoneApplicationPage
{
    ObservableCollection<Items> source = new ObservableCollection<Items>();

    public MainPage()
    {
        InitializeComponent();

        source.Add(new Items { Id = 1 });
        source.Add(new Items { Id = 2 });
        source.Add(new Items { Id = 3 });
        source.Add(new Items { Id = 4 });

        TheListBox.ItemsSource = source;
    }

    private void ListPicker_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (source.Count > 0 && e.AddedItems.Count > 0)
        {
            for (int i = 0; i < source.Count; i++)
            {
                this.source[i].IsChecked = int.Parse(((ContentControl)(e.AddedItems[0])).Content.ToString()) >= this.source[i].Id;
            }
        }
    }
}

public class Items : INotifyPropertyChanged
{
    private bool isChecked;

    public int Id { get; set; }

    public string Name
    {
        get
        {
            return "Item " + this.Id;
        }
    }

    public bool IsChecked
    {
        get
        {
            return this.isChecked;
        }

        set
        {
            this.isChecked = value;
            this.OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}