如何在ListBox中设置CheckBox默认选中

时间:2014-06-20 06:39:19

标签: c# windows-phone-8 checkbox

我正在编写Windows Phone 8应用程序。我有一个ListBox与一个类绑定,它包含XML数据。在我的班级中有一个名为Favorite的字段,我希望如果Favorite等于0,则应取消选中CheckBox,如果它等于1,则应检查CheckBox。 有关详细信息,请参阅下面的代码:

<ListBox x:Name="listBox1" Width="429" Height="621" HorizontalAlignment="Left" 
         Margin="21,43,0,59" VerticalAlignment="Top" ItemsSource="{Binding}" 
         SelectedItem="{Binding}" SelectionMode="Extended">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical" Width="440">
                <TextBlock Text="{Binding}" TextWrapping="Wrap" Foreground="Black" FontSize="22" Height="30" TextAlignment="Left" Width="Auto" FontWeight="SemiBold"/>
                <TextBlock Text="{Binding}" TextWrapping="Wrap" Foreground="Black" FontSize="22" Margin="5" Height="30" TextAlignment="Left" Width="Auto" FontWeight="SemiBold"/>
                <TextBlock Text="{Binding}" TextWrapping="Wrap" Foreground="Black" FontSize="22" Margin="5" Height="30" TextAlignment="Left" Width="Auto" FontWeight="SemiBold"/>
                <StackPanel>
                    <CheckBox x:Name="CheckBox1" IsChecked="False" Height="72" Foreground="Black" Margin="358,-110,22,0" BorderBrush="Black" Loaded="CheckBox1_Loaded" Checked="CheckBox1_Checked" Unchecked="CheckBox1_Unchecked" />
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

这是我的代码隐藏文件:

XDocument doc = XDocument.Parse(e.Result);
List<CUST_CONT> customers = new List<CUST_CONT>();

customers = (from query in doc.Descendants("row")
             select new CUST_CONT
             {
                 Id = query.Element("Id").Value,
                 Name = query.Element("Name").Value,
                 Address = query.Element("Address").Value,
                 Favourite = (query.Element("Favourite").Value)
             }).ToList();
listBox1.DataContext = customers;

2 个答案:

答案 0 :(得分:2)

您需要根据所需的条件DataBind CheckBox。在这里,尝试实现这个;

<ListBox x:Name="listBox1" Width="429" Height="621" HorizontalAlignment="Left" Margin="21,43,0,59" VerticalAlignment="Top" ItemsSource="{Binding}" SelectedItem="{Binding}" SelectionMode="Extended">
   <ListBox.ItemTemplate>
     <DataTemplate>
       <StackPanel Orientation="Vertical" Width="440">
            <TextBlock Text="{Binding}" TextWrapping="Wrap" Foreground="Black" FontSize="22" Height="30" TextAlignment="Left" Width="Auto" FontWeight="SemiBold"/>
            <TextBlock Text="{Binding}" TextWrapping="Wrap" Foreground="Black" FontSize="22" Margin="5" Height="30" TextAlignment="Left" Width="Auto" FontWeight="SemiBold"/>
            <TextBlock Text="{Binding}" TextWrapping="Wrap" Foreground="Black" FontSize="22" Margin="5" Height="30" TextAlignment="Left" Width="Auto" FontWeight="SemiBold"/>

            <StackPanel>
               <CheckBox x:Name="CheckBox1" IsChecked="{Binding IsFavourite}" Height="72" Foreground="Black" Margin="358,-110,22,0" BorderBrush="Black" Loaded="CheckBox1_Loaded" Checked="CheckBox1_Checked" Unchecked="CheckBox1_Unchecked" />
            </StackPanel>
       </StackPanel>
      </DataTemplate>
   </ListBox.ItemTemplate>    
</ListBox>

然后在你的代码中;

XDocument doc = XDocument.Parse(e.Result);
List<CUST_CONT> customers = new List<CUST_CONT>();

customers = (from query in doc.Descendants("row")
            select new CUST_CONT
            {
                 Id = query.Element("Id").Value,
                 Name = query.Element("Name").Value,
                 Address = query.Element("Address").Value,
                 Favourite = (query.Element("Favourite").Value)
            }).ToList();

for (int i = 0; i < customers.Count; i++)
{
    if (customers.ElementAt(i).Favourite == "0")
    {
        customers.ElementAt(i).IsFavourite = "False";
    }
    else
    {
        customers.ElementAt(i).IsFavourite = "True";
    }
}

listBox1.DataContext = customers;

不要忘记在IsFavourite班级

中添加CUST_CONT
public class CUST_CONT
{
    public string IsFavourite { get; set; }
}

希望这有帮助。

答案 1 :(得分:1)

您必须使用IValueConverter

喜欢

 public class YesNoToBooleanConverter : IValueConverter
    {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                    if(value.ToString()=="0")
                      {
                         return false;
                      }
                    else
                     {
                        return true;
                     }
            }

            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {

            }
    }

在您的XAML

<Window.Resources>
            <local:YesNoToBooleanConverter x:Key="YesNoToBooleanConverter" />
</Window.Resources>



<CheckBox IsChecked="{Binding Favourite,Mode="TwoWay", Converter={StaticResource YesNoToBooleanConverter}}"/>