C# C排序组合框项目,第一个除外

C# C排序组合框项目,第一个除外,c#,combobox,C#,Combobox,我需要对组合框中的项目进行排序,第0个索引处的项目除外。我认为是将第一个值存储在某个字符串中的逻辑。然后应用组合框项目的排序。在此之后,在第0个索引处插入存储项,并从另一个索引中删除。但这不是一个适合我需求的解决方案 string str = cmbItems.Items[0].ToString(); cmbItems.Sorted = true; cmbItems.Items.Insert(0, str); 但在上述方法中,它并没有添加到第0个索引中。而是在排序位置。您使用什么用户界面? 例

我需要对组合框中的项目进行排序,第0个索引处的项目除外。我认为是将第一个值存储在某个字符串中的逻辑。然后应用组合框项目的排序。在此之后,在第0个索引处插入存储项,并从另一个索引中删除。但这不是一个适合我需求的解决方案

string str = cmbItems.Items[0].ToString();
cmbItems.Sorted = true;
cmbItems.Items.Insert(0, str);
但在上述方法中,它并没有添加到第0个索引中。而是在排序位置。

您使用什么用户界面? 例如,如果您使用MVVM并将项存储在ObservableCollection中,则此解决方案可能适用

ObservableCollecton<Item> Items 
{
  get{ this._items; }
  set{ 
    if (this._items != value) 
    {
      this._items = value;
      NotifyPropertyChanged(()=>Items);
    }
  }
}

void Sort()
{
  var temp = new ObservableCollection<Item>(Items.Take(1).Union(Items.Skip(1).OrderBy(item => item.Id)));
  Items = temp;
}
你使用什么用户界面? 例如,如果您使用MVVM并将项存储在ObservableCollection中,则此解决方案可能适用

ObservableCollecton<Item> Items 
{
  get{ this._items; }
  set{ 
    if (this._items != value) 
    {
      this._items = value;
      NotifyPropertyChanged(()=>Items);
    }
  }
}

void Sort()
{
  var temp = new ObservableCollection<Item>(Items.Take(1).Union(Items.Skip(1).OrderBy(item => item.Id)));
  Items = temp;
}

您可以使用SortComparison


然后,您可以将第0个索引值设置为在所有其他字符串之前。

您可以使用SortComparison


然后,您可以将第0个索引值设置为在所有其他字符串之前。

好吧,回答我自己的问题。缺少的是在排序后禁用组合框的Sort属性。因为如果组合框的排序为true,则对于其他项目,它将保持true,并以排序模式添加它们。 因此,排序完成后,将其设为false,然后在第0个索引处添加存储项

这是密码-

string str = cmbItems.Items[0].ToString();
cmbItems.Items.RemoveAt(0);
cmbItems.Sorted = true; // Sort the items
cmbItems.Sorted = false; // Disable the sorting
cmbItems.Items.Insert(0, str);

嗯,回答我自己的问题。缺少的是在排序后禁用组合框的Sort属性。因为如果组合框的排序为true,则对于其他项目,它将保持true,并以排序模式添加它们。 因此,排序完成后,将其设为false,然后在第0个索引处添加存储项

这是密码-

string str = cmbItems.Items[0].ToString();
cmbItems.Items.RemoveAt(0);
cmbItems.Sorted = true; // Sort the items
cmbItems.Sorted = false; // Disable the sorting
cmbItems.Items.Insert(0, str);

为什么不是呢?这种方法有什么问题?请提供一个答案,你的问题肯定会从添加一些代码中受益…@Sayse好吧,我试过了,问题是如果我使用cmbItems.sorted=true,然后应用我的方法,那么项目将添加到排序位置,而不是第一个位置。为什么不是?这种方法有什么问题?请提供一个答案,你的问题肯定会从添加一些代码中受益…@Sayse好吧,我试过了,问题是如果我使用cmbItems.sorted=true,然后应用我的方法,那么项目将添加到排序位置,而不是第一个位置。欢迎使用。不要假设OP正在使用什么。问一问comment@ardila这可能没问题。无论op使用什么GUI框架,这都是一个有效的示例。如果不是WPF,他只需要提取代码并在其他地方使用它/MVVM@Mafi我不同意。这个问题几乎不够明确和具体,因为它将得到有意义的回答。这就是评论的目的,要求澄清。如果问题后来被细化,结果是OP没有使用MVVM,那么这个答案是无用的。@ardila ok,同意。Op应该提供一个tho…欢迎使用SO。不要假设OP正在使用什么。问一问comment@ardila这可能没问题。无论op使用什么GUI框架,这都是一个有效的示例。如果不是WPF,他只需要提取代码并在其他地方使用它/MVVM@Mafi我不同意。这个问题几乎不够明确和具体,因为它将得到有意义的回答。这就是评论的目的,要求澄清。如果问题后来被细化,结果是OP没有使用MVVM,那么这个答案是无用的。@ardila ok,同意。Op应该提供一个tho…很好的答案!!!很好的回答!!!