我的wpf应用程序中有一个组合框,我需要在0到255之间添加256个项目。这看起来很简单,但我担心代码长度。
XAML:
<ComboBox ItemsSource="{Binding ChannelBitLengthList}" SelectedItem="{Binding SelectedChannelBitLengthList, Mode=TwoWay}" SelectedIndex="0" />
视图模型:
public ObservableCollection<string> ChannelBitLengthList
{
get { return _ChannelBitLengthList; }
set
{
_ChannelBitLengthList = value;
OnPropertyChanged("ChannelBitLengthList");
}
}
private string _SelectedChannelBitLengthList;
public string SelectedChannelBitLengthList
{
get { return _SelectedChannelBitLengthList; }
set
{
_SelectedChannelBitLengthList = value;
OnPropertyChanged("SelectedChannelBitLengthList");
}
}
Constructor:
//List of Channels
_ChannelBitLengthList.Add("0");
_ChannelBitLengthList.Add("1");
_ChannelBitLengthList.Add("2");
_ChannelBitLengthList.Add("3");
.......... till .Add("255");
我不想要这么多.Add()
语句才能输入项目。是否有一种替代且更有效的方法,我可以在没有太多代码长度的情况下添加所有这255个项目?
答案 0 :(得分:3)
由于您要插入最多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()));
答案 1 :(得分:1)
如果项目为1 ... 255
,您可以像这样写循环for(int i=0;i<=255;i++)
_ChannelBitLengthList.Add(i.ToString());
答案 2 :(得分:1)
这不起作用 -
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()));
答案 3 :(得分:1)
怎么样:
ChannelBitLengthList = new ObservableCollection<string>(Enumerable.Range(0, 256).Select(x=>x.ToString()));
答案 4 :(得分:0)
这种方法的一个问题是,每次更新时,可观察集合都会通知UI。因此每次都会不必要地重新渲染界面。如果你想阻止这种情况发生(类似于winforms中的旧Suspend&amp; ResumeLayout方法),你可以这样做:
using (Dispatcher.DisableProcessing())
{
for(int i=0;i<=255;i++)
_ChannelBitLengthList.Add(i.ToString());
}
禁用处理将停止UI更新。当DispatcherProcessingDisabled放置在Using范围的末尾时,它将再次重新启用UI布局处理。