1

我的 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 个项目而没有太多代码长度?

4

5 回答 5

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()));
于 2012-10-24T12:20:16.880 回答
1

如果项目是 1...255,你可以这样写 for 循环

for(int i=0;i<=255;i++)
  _ChannelBitLengthList.Add(i.ToString());
于 2012-10-24T12:19:07.280 回答
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()));
于 2012-10-24T12:19:43.313 回答
1

怎么样:

ChannelBitLengthList = new ObservableCollection<string>(Enumerable.Range(0, 256).Select(x=>x.ToString()));
于 2012-10-24T12:23:36.277 回答
0

这种方法的一个问题是,每次更新时,可观察集合都会通知 UI。因此,每次都会不必要地重新渲染界面。如果你想阻止这种情况发生(类似于 winforms 中旧的 Suspend&ResumeLayout 方法),你可以这样做:

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

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

于 2012-10-24T14:53:27.967 回答