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

このアプローチの問題点の 1 つは、監視可能なコレクションが 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 に答える