我无法使用此代码取消选中复选框
Posted
技术标签:
【中文标题】我无法使用此代码取消选中复选框【英文标题】:I cant uncheck the checkBox by using this code 【发布时间】:2015-11-11 06:50:41 【问题描述】:我将复选框的选中状态保存在隔离存储中,但每当我取消选中复选框然后再次启动应用程序时,它仍然处于选中状态,但我将其状态保存在 backkeypress 上
这是来自构造函数
if (IsolatedStorageSettings.ApplicationSettings.Contains("mySavedList"))
lstshopNew = IsolatedStorageSettings.ApplicationSettings["mySavedList"] as List<Shopping>;
if (lstshopNew.Count > 0)
foreach (var item in lstshopNew)
var t = lstShop.Where(s => s.list.Equals(item.list)).FirstOrDefault();
if (t != null)
t.IsCompleted = true;
private void checkboxSL_Checked(object sender, RoutedEventArgs e)
//isChkboxChecked = true;
//(sender as CheckBox).IsChecked = isChkboxChecked;
//IsolatedStorageSettings.ApplicationSettings["isChecked"] = (sender as CheckBox).IsChecked;
var chk = (sender as CheckBox).DataContext as Shopping;
if (chk == null)
return;
chk.IsCompleted = true;
var lstItem = lstShop.Where(x => x.list.Equals(chk.list)).FirstOrDefault();
if (lstItem != null)
lstshopNew.Remove(chk);
lstshopNew.Add(chk);
private void checkboxSL_Unchecked(object sender, RoutedEventArgs e)
//(sender as CheckBox).IsChecked = false;
//IsolatedStorageSettings.ApplicationSettings["isChecked"] = (sender as CheckBox).IsChecked;
var chk = (sender as CheckBox).DataContext as Shopping;
if (chk == null)
return;
chk.IsCompleted = false;
var lstItem = lstShop.Where(x => x.list.Equals(chk.list)).FirstOrDefault();
if (lstItem != null)
lstshopNew.Remove(chk);
lstshopNew.Remove(chk);
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
base.OnBackKeyPress(e);
IsolatedStorageSettings.ApplicationSettings["mySavedList"] = lstshopNew;
XAML 代码
<ListBox x:Name="listBox2" SelectionMode="Multiple" Grid.Row="1" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="White" >
<CheckBox x:Name="checkboxSL" IsChecked="Binding IsCompleted, Mode=TwoWay" Checked="checkboxSL_Checked" Unchecked="checkboxSL_Unchecked" BorderBrush="Black" Foreground="Black" Style="StaticResource CheckBoxStyle1"/>
<TextBlock Text="Binding list" FontSize="30" TextWrapping="Wrap" HorizontalAlignment="Left" Foreground="Black" Margin="0,15,0,0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
【问题讨论】:
【参考方案1】:您正在将Shopping
放入您的隔离存储中。这是具有唯一内存地址的 C# 类的实例。然后您重新运行应用程序并检查保存的 Shopping 对象是否与您刚刚创建的 Shopping 对象相同。不是,因为这些新对象是具有新内存地址的新实例。
您要做的是在 Shopping 类中添加一个唯一 ID(如数字或唯一关键字)。然后比较该 ID(不是整个对象)以确定存储中的对象是否与 GUI 上的相同。
【讨论】:
我通过使用断点进行比较,两者都是相同的,一旦保存在存储中,我就无法删除它 两个对象中的每个属性的值都是一样的,但是它们是同一个对象的两个不同的副本,因此它们在代码上是不一样的。如果有一个独特的我想在 Shipping 你可以比较一下。 你能举个例子吗【参考方案2】:我对活动进行的这些更改对我有用 私人无效复选框SL_Checked(对象发送者,RoutedEventArgs e) var chk = (sender as CheckBox).DataContext as Shopping;
if (chk == null)
return;
chk.IsCompleted = true;
var lstItem = lstShop.Where(x => x.list.Equals(chk.list)).FirstOrDefault();
//if (lstItem != null)
//
// lstshopNew.Remove(lstItem);
//
if (lstshopNew.Count > 0)
foreach (var item in lstshopNew.ToList())
if (item.list.Equals(lstItem.list))
tItem = item.list;
if (!lstItem.list.Equals(tItem))
lstshopNew.Add(chk);
else
lstshopNew.Add(chk);
private void checkboxSL_Unchecked(object sender, RoutedEventArgs e)
var chk = (sender as CheckBox).DataContext as Shopping;
if (chk == null)
return;
chk.IsCompleted = false;
var lstItem = lstShop.Where(x => x.list.Equals(chk.list)).FirstOrDefault();
if (lstItem != null)
foreach (var item in lstshopNew.ToList())
if (item.list.Equals(lstItem.list))
lstshopNew.Remove(item);
【讨论】:
以上是关于我无法使用此代码取消选中复选框的主要内容,如果未能解决你的问题,请参考以下文章
无法在 chrome 上的移动视图中取消选中复选框输入 [重复]