2014-06-20 140 views
3

我正在编写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

您需要根据所需条件将CheckBox DataBind。在这里,尝试执行此操作;

<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; 

不要忘记添加IsFavouriteCUST_CONT

public class CUST_CONT 
{ 
    public string IsFavourite { get; set; } 
} 

希望这有助于。

+0

Vyas_27,谢谢你man..stay祝福! ! –

+0

高兴地帮助@NiteshKothari。 – Vyas

+0

Vyas_27,你能告诉我,如何防止chechBox.Checked事件?问题是,当我导航到页面时,默认CheckBox.Checked事件被触发。如何解决这个问题? –

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}}"/> 
+0

Dhaval Ptel,谢谢你为我的快速反应,我得到错误的ConvertBack方法,也在“” –