C# 如何在WPF中有效地在Combobox中添加许多项

C# 如何在WPF中有效地在Combobox中添加许多项,c#,.net,wpf,mvvm,combobox,C#,.net,Wpf,Mvvm,Combobox,我的wpf应用程序中有一个组合框,我需要在其中添加256项,从0到255。这看起来很简单,但我关心的是代码长度 XAML: 视图模型: 我不想有这么多。添加语句以输入项目。有没有其他更有效的方法可以添加所有这255个项目而不需要太多代码长度?如果项目是1…255,您可以这样编写for循环 for(int i=0;i<=255;i++) _ChannelBitLengthList.Add(i.ToString()); 如果项目为1…255,则可以这样编写for循环 for(int i=

我的wpf应用程序中有一个组合框,我需要在其中添加256项,从0到255。这看起来很简单,但我关心的是代码长度

XAML:

视图模型:


我不想有这么多。添加语句以输入项目。有没有其他更有效的方法可以添加所有这255个项目而不需要太多代码长度?

如果项目是1…255,您可以这样编写for循环

for(int i=0;i<=255;i++)
  _ChannelBitLengthList.Add(i.ToString());

如果项目为1…255,则可以这样编写for循环

for(int i=0;i<=255;i++)
  _ChannelBitLengthList.Add(i.ToString());
这不管用吗-

for (int i =0 ;i <256;i++)
{
   _ChannelBitLengthList.Add(i.ToString());
}
这个怎么样-

ObservableCollection<string> ChannelBitLengthList =
       new ObservableCollection<string>(Enumerable.Range(0, 256)
               .Select(t => t.ToString()));
这不管用吗-

for (int i =0 ;i <256;i++)
{
   _ChannelBitLengthList.Add(i.ToString());
}
这个怎么样-

ObservableCollection<string> ChannelBitLengthList =
       new ObservableCollection<string>(Enumerable.Range(0, 256)
               .Select(t => t.ToString()));

由于最多要插入255个项目,而不是254个项目,因此应使用:

for(int i=0;i<=255;i++)
{
  _ChannelBitLengthList.Add(i.ToString());
}
或者,如果要使用LINQ:

ChannelBitLengthList = new ObservableCollection<string>(Enumerable.Range(0, 256).Select(str=>str.ToString()));

由于最多要插入255个项目,而不是254个项目,因此应使用:

for(int i=0;i<=255;i++)
{
  _ChannelBitLengthList.Add(i.ToString());
}
或者,如果要使用LINQ:

ChannelBitLengthList = new ObservableCollection<string>(Enumerable.Range(0, 256).Select(str=>str.ToString()));
那么:

ChannelBitLengthList = new ObservableCollection<string>(Enumerable.Range(0, 256).Select(x=>x.ToString()));
那么:

ChannelBitLengthList = new ObservableCollection<string>(Enumerable.Range(0, 256).Select(x=>x.ToString()));

这种方法的一个问题是,每次更新时,可观察集合都会通知UI。。因此,每次都会不必要地重新呈现接口。如果要阻止类似于winforms中旧的Suspend&ResumeLayout方法的情况发生,可以执行以下操作:

using (Dispatcher.DisableProcessing())
{
  for(int i=0;i<=255;i++)
    _ChannelBitLengthList.Add(i.ToString());
}

禁用处理将停止UI更新。当DispatcherProcessingDisabled在使用范围结束时被释放时,它将再次重新启用UI布局处理。

这种方法的一个问题是,每次更新时,可观察集合都会通知UI。。因此,每次都会不必要地重新呈现接口。如果要阻止类似于winforms中旧的Suspend&ResumeLayout方法的情况发生,可以执行以下操作:

using (Dispatcher.DisableProcessing())
{
  for(int i=0;i<=255;i++)
    _ChannelBitLengthList.Add(i.ToString());
}

禁用处理将停止UI更新。当DispatcherProcessingDisabled在使用范围结束时释放时,它将再次重新启用UI布局处理。

代码长度:检查。代码效率:完全不检查。@Baboon在效率方面,您希望更改什么?您可能必须将ObservableCollection子类化,并实现类似于List.AddRange的功能,仅在添加每个项后才更改集合。确实,但是它是可重用的。请参阅下面我的答案,了解如何通过暂时禁用UI更新(如winforms中的Suspend/ResumeLayout)来提高效率。代码长度:检查。代码效率:完全不检查。@Baboon在效率方面,您希望更改什么?您可能必须将ObservableCollection子类化,并实现类似于List.AddRange的功能,仅在添加每个项后才更改集合。确实,但是它是可重用的。请参阅下面我的答案,了解如何通过暂时禁用UI更新(如winforms中的Suspend/ResumeLayout)来提高效率。