[英]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% 有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.