簡體   English   中英

我如何比較列表<string> ' 項目(內容或名稱等),在 ComboBox 中選擇項目?</string>

[英]How do I compare List<string>’ items (content،name or etc), with selected items in ComboBox?

首先,我為我的語言語法感到抱歉,因為我的第一語言是波斯語(伊朗)。 我有一個 ComboBox 具有用於多選和多刪除的 CheckBox 然后我嘗試遵循代碼但我沒有得出結論。

<Style x:Key="{x:Type ComboBoxItem}" TargetType="{x:Type ComboBoxItem}">
        <Setter Property="SnapsToDevicePixels" Value="true" />
        <Setter Property="OverridesDefaultStyle" Value="true" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ComboBoxItem}">
                    <Border x:Name="Border" SnapsToDevicePixels="true" Background="Transparent">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="SelectionStates">
                                <VisualState x:Name="Unselected" />
                                <VisualState x:Name="Selected">
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
                                            <EasingColorKeyFrame KeyTime="0" Value="#FFC5CBF9" />
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="SelectedUnfocused">
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
                                            <EasingColorKeyFrame KeyTime="0" Value="#FFDDDDDD" />
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <CheckBox Name="MultiSelectCheckBox" Content="{Binding}" Checked="MultiSelectCheckBox_Checked">
                        </CheckBox>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>

后面的代碼:

    List<string> CheckedList = new List<string>();
    private void MultiSelectCheckBox_Checked(object sender, RoutedEventArgs e)
    {
        CheckBox CB = sender as CheckBox;
        CheckedList.Add(CB.Content.ToString());
    }
    private void Delete_Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        switch (BookCategory_ComboBox.Text)
        {
            case null:
                break;
            default:
                for (int i = 0; i < CheckedList.Count - 1; i++)
                {
                    string a = CheckedList[i].ToString();
                    if (CheckedList[i].ToString()==BookCategory_ComboBox.Items[i].ToString())
                    {
                        BookCategory_ComboBox.Items.Remove(BookCategory_ComboBox.Items[i]);
                    }
                }
                break;
        }
    }

謝謝

我無法找到您的結論,但根據您的代碼,您可以嘗試進行比較。

foreach (ComboBoxItem cbi in BookCategory_ComboBox.Items )
{
  if(CheckedList.Any(c => c == cbi.ToString()))
  {
    BookCategory_ComboBox.Items.Remove(cbi);
  }
}

謝謝,但我找到了一個更完整的解決方案。

<Style x:Key="{x:Type ComboBoxItem}" TargetType="{x:Type ComboBoxItem}">
     <Setter Property="SnapsToDevicePixels" Value="true" />
     <Setter Property="OverridesDefaultStyle" Value="true" />
     <Setter Property="Template">
         <Setter.Value>
             <ControlTemplate TargetType="{x:Type ComboBoxItem}">
                 <Border x:Name="Border" SnapsToDevicePixels="true" Background="Transparent">
                     <VisualStateManager.VisualStateGroups>
                         <VisualStateGroup x:Name="SelectionStates">
                             <VisualState x:Name="Unselected" />
                             <VisualState x:Name="Selected">
                                 <Storyboard>
                                     <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
                                         <EasingColorKeyFrame KeyTime="0" Value="#FFC5CBF9" />
                                     </ColorAnimationUsingKeyFrames>
                                 </Storyboard>
                             </VisualState>
                             <VisualState x:Name="SelectedUnfocused">
                                 <Storyboard>
                                     <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
                                         <EasingColorKeyFrame KeyTime="0" Value="#FFDDDDDD" />
                                     </ColorAnimationUsingKeyFrames>
                                 </Storyboard>
                             </VisualState>
                         </VisualStateGroup>
                     </VisualStateManager.VisualStateGroups>
                     <CheckBox Name="MultiSelectCheckBox" Content="{Binding}" Checked="MultiSelectCheckBox_Checked" Unchecked="MultiSelectCheckBox_Unchecked">
                     </CheckBox>
                 </Border>
             </ControlTemplate>
         </Setter.Value>
     </Setter>
 </Style>

背后的代碼

 //Global List<string>
 List<string> CheckedList = new List<string>();
     private void Add_Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
     {
         switch (BookCategory_ComboBox.Text)
         {
             case null:
                 break;
             default:
                 //In order to avoid duplication
                 if (!BookCategory_ComboBox.Items.Contains(BookCategory_ComboBox.Text.Trim().Substring(0, 1).ToUpper() + BookCategory_ComboBox.Text.Trim().Substring(1, BookCategory_ComboBox.Text.Trim().Length - 1).ToLower()))
                 {
                  //Uppercase first letter of string
                     BookCategory_ComboBox.Items.Add(BookCategory_ComboBox.Text.Trim().Substring(0, 1).ToUpper() + BookCategory_ComboBox.Text.Trim().Substring(1, BookCategory_ComboBox.Text.Trim().Length - 1).ToLower());
                 }
                 //Sort
                 BookCategory_ComboBox.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("", System.ComponentModel.ListSortDirection.Ascending));
                 CheckedList.Clear();
                 break;
         }
     }
     private void MultiSelectCheckBox_Checked(object sender, RoutedEventArgs e)
     {
         CheckBox CB = sender as CheckBox;
         CheckedList.Add(CB.Content.ToString());
     }
     private void MultiSelectCheckBox_Unchecked(object sender, RoutedEventArgs e)
     {
         CheckBox CB = sender as CheckBox;
         CheckedList.Remove(CB.Content.ToString());
     }
     private void Delete_Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
     {
         switch (BookCategory_ComboBox.Items)
         {
             case null:
                 break;
             default:
                 List<string> CB_Item = new List<string>();
                 for (int i = BookCategory_ComboBox.Items.Count - 1; i >= 0; i--)
                 {
                     if (!CheckedList.Contains(BookCategory_ComboBox.Items[i].ToString()))
                     {
                         CB_Item.Add(BookCategory_ComboBox.Items[i].ToString());
                     }
                 }
                 BookCategory_ComboBox.Items.Clear();
                 for (int i = CB_Item.Count - 1; i >= 0; i--)
                 {
                     BookCategory_ComboBox.Items.Add(CB_Item[i].ToString());
                 }
                 //Uppercase first letter of string
                 BookCategory_ComboBox.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("", System.ComponentModel.ListSortDirection.Ascending));
                 BookCategory_ComboBox.Items.Refresh();
                 break;
         }
     }

100% 有效。

多選 ComboBox gif

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM