我正在编写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;
答案 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}}"/>