【问题标题】:Check back Checkbox items which are checked previouslyCheck back 先前选中的复选框项目
【发布时间】:2014-07-25 00:15:58
【问题描述】:

从下面的代码中可以看出,我在列表中有一些复选框项目,这就是我的实现方式。

<ListBox Grid.Row="1" Margin="12,0,12,0" Name="listBox" >
   <ListBox.ItemTemplate>
       <DataTemplate>
           <CheckBox Foreground="Black" Content="{Binding Types}" IsChecked="{Binding Path=IsSelected,Mode=TwoWay}"/>
        </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

和后面的c#代码,

        List<Items> list1;
        list1 = new List<Items>();
        list1.Add(new Items() { Types = "Checkbox1", IsSelected = false });
        list1.Add(new Items() { Types = "Checkbox2", IsSelected = false });
        list1.Add(new Items() { Types = "Checkbox3", IsSelected = false });
        list1.Add(new Items() { Types = "Checkbox4", IsSelected = false });
        list1.Add(new Items() { Types = "Checkbox5", IsSelected = false });
        list1.Add(new Items() { Types = "Checkbox6", IsSelected = false });
        this.listBox.ItemsSource = list1;

我只想保存选中的复选框,然后在导航到该页面时再次选中那些以前选中的复选框。我尝试使用 PhoneApplicationService.Current.State 但无法实现我的目标。

【问题讨论】:

    标签: c# windows-phone-7 windows-phone-8 checkboxlist


    【解决方案1】:

    当您离开页面时,您可以获取列表并将其转换为 JSON 字符串并将其存储在 IsolatedStorageSettings 中,然后当您返回时从 IsolatedStorageSettings 检索 JSON 字符串并将 JSON 字符串反序列化到列表中,然后填充列表框。您可以使用 JSON.Net 进行序列化和反序列化。从 Nuget 安装它。

    【讨论】:

    • 这是一个很长的方法,我不需要隔离存储来存储。我已经通过使用电话状态服务保存项目源来实现这一点,但在第二次导航时遇到了一些错误。非常感谢任何有用的代码。
    • 是的,状态的问题在于。状态是页权特有的。 PhoneApplicationService.Current.State 在应用被删除时使用。但如果页面导航到另一个页面,它不会保留这些值。我给你的解决方案有点贵,但它适用于所有情况。即使在应用重新启动后。
    • 很抱歉您对电话应用程序状态知之甚少。如果您通过状态保存值,则可以在任何页面中的任何位置使用它的键值调用它。我也知道独立存储,但你能帮我写代码吗?
    • 那么是时候了解 ApplicationStates 了吧?我会这样做..你到底有什么错误?有什么例外吗?
    • 是的,是时候给你了。我没有遇到任何异常,因为我将完整的 itemsource 保存在我的键值中,所以我无法有效地使用它。任何其他方法,甚至是关于如何克服这个问题的逻辑都受到高度赞赏。
    【解决方案2】:

    尝试将Settings 中的值保存在IsolatedStorage 中。

    这只是一个示例:

    xml:

    .cs:

     public MainPage()
     {
        InitializeComponent();
        Loaded += MainPage_Loaded;
    
     }
    
    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        var settings = IsolatedStorageSettings.ApplicationSettings;
        if (settings.Contains("CheckBox1Checked"))
            CheckBox1.Checked = settings["CheckBox1Checked"];
    }
    
    private void OnChecked(object sender, RoutedEventArgs e)
    {
        var settings = IsolatedStorageSettings.ApplicationSettings;
        settings["CheckBox1Checked"] = true;
        settings.Save();
    }
    
    
    private void OnUnchecked(object sender, RoutedEventArgs e)
    {
        var settings = IsolatedStorageSettings.ApplicationSettings;
        settings["CheckBox1Checked"] = false;
        settings.Save();
    }
    

    更多请关注here

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-23
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 2016-11-14
      相关资源
      最近更新 更多