0

我正在试图填充ObservableCollection与MultiSelectList中的当前选定的项目。选择的方法涉及复选框控件,我不确定如何让选定的项目填充ObservableCollection。我引用了两种方法执行MultiSelectList的单个选择以及MultiSelectList的“全选”选项。如何获取选中的复选框项目后面的代码

要注意,networkSelectList是自定义设置类中的ObservableCollection。

MainPage.xaml中

<toolkit:MultiselectList x:Name="connectionTypeMultiSelectList" HorizontalAlignment="Left" VerticalAlignment="Top" Tap="connectionTypeMultiSelectList_Tap"> 
    <toolkit:MultiselectList.ItemTemplate> 
     <DataTemplate> 

      <StackPanel Orientation="Horizontal" Margin="12,0,0,0"> 
       <Image Source="{Binding Icon}" Width="35" Height="35" Margin="0"/> 
       <TextBlock Text="{Binding Name}" TextAlignment="Center" Margin="10"/> 
      </StackPanel> 

     </DataTemplate> 
    </toolkit:MultiselectList.ItemTemplate>        
</toolkit:MultiselectList> 

MainPage.xaml.cs中

/// <summary> 
    /// method to Select All and UnSelect All checkboxes 
    /// </summary> 
    /// <param name="selected"></param> 
    /// <param name="predicate"></param> 
    private void SetCheckBoxesSelected(bool selected, Predicate<ConnectionItem> predicate) 
    { 
     if (networkTypeList == null) 
     { 
      return; 
     } 
     if (predicate == null) 
     { 
      predicate = (networkInfo) => true; 
     } 


     ItemContainerGenerator itemContainerGenerator = this.connectionTypeMultiSelectList.ItemContainerGenerator; 


     foreach (ConnectionItem networkInfo in networkTypeList) 
     { 
      if (networkInfo != null && predicate(networkInfo)) 
      { 
       DependencyObject visualItem = itemContainerGenerator.ContainerFromItem(networkInfo); 
       MultiselectItem multiselectItem = visualItem as MultiselectItem; 
       if (multiselectItem != null) 
       { 
        multiselectItem.IsSelected = selected; 

        //add selected item to networkSelectionChecked ?? 
        //Settings.networkSelectionChecked.Value.Add(multiselectItem.Name.ToString()); 
       } 
      } 
     } 
    } 

    /// <summary> 
    /// triggered on tap of any item in connectionTypeMultiSelectList 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    private void connectionTypeMultiSelectList_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
     DependencyObject tappedElement = e.OriginalSource as UIElement; 
     MultiselectItem tappedItem = this.FindParentOfType<MultiselectItem>(tappedElement); 
     ConnectionItem selectedItem = null; 
     if (tappedItem != null) 
     { 
      // DataContext contains reference to data item 
      selectedItem = tappedItem.DataContext as ConnectionItem; 
     } 


     if (selectedItem != null) 
     { 
      MessageBox.Show(selectedItem.Name + "Tapped"); 

      //add selected item to networkSelectionChecked ?? 
      //Settings.networkSelectionChecked.Value.Add(multiselectItem.Name.ToString()); 

     } 
    } 

    /// <summary> 
    /// method to find out the element in VisualTree 
    /// </summary> 
    /// <typeparam name="T"></typeparam> 
    /// <param name="element"></param> 
    /// <returns></returns> 
    private T FindParentOfType<T>(DependencyObject element) where T : DependencyObject 
    { 
     T result = null; 
     DependencyObject currentElement = element; 
     while (currentElement != null) 
     { 
      result = currentElement as T; 
      if (result != null) 
      { 
       break; 
      } 
      currentElement = VisualTreeHelper.GetParent(currentElement); 
     } 
     return result; 
    } 

    void unselectAll_Click(object sender, EventArgs e) 
    { 
     this.SetCheckBoxesSelected(false, null); 
     this.connectionTypeMultiSelectList.IsSelectionEnabled = false; 
    } 

    void selectAll_Click(object sender, EventArgs e) 
    { 
     this.SetCheckBoxesSelected(true, null); 
    } 

所以基本上我想补充一点,选择到一个ObservableCollection每个项目。我想完成此操作,以便能够创建辅助磁贴并通过传递代表所选复选框的查询字符串来更新它们。我该如何将所选复选框项目正确添加到ObservableCollection中?同样,我会如何检测何时未选中某个项目并从ObservableCollection中删除该项目?此外,是否有一种正确的方法可将所选项目保存在MultiSelectList中,以便将其保存用于未来启动或激活的应用程序?

+1

你可以做的是这样的下一个应用程序启动,你会知道,所有被检查添加一个布尔值类ConnectionItem和拨动它通过多选的复选框。 – CognitiveDesire 2012-08-13 11:46:20

回答

1

您可以从SelectedItems属性中获取所选项目。

var selectedItems = new ObservableCollection<ConnectionItem>(connectionTypeMultiSelectList.SelectedItems.Count); 
foreach (var item in TextItemsList.SelectedItems) 
{ 
    var connectionItem = item as ConnectionItem; 
    if (connectionItem == null) continue; 
    selectedItems.Add(connectionItem); 
} 

SelectionChanged事件会让你知道什么时候一个项目被选中。

void MultiSelectListSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    foreach(var item in e.AddedItems) 
    { 
     // add to collection 
    } 
    foreach(var item in e.RemovedItems) 
    { 
     // remove from collection 
    } 
} 
相关问题