【问题标题】:WPF C#. put observablecollection into List<string>WPF C#。将 observablecollection 放入 List<string>
【发布时间】:2011-07-27 15:04:11
【问题描述】:

我有 observablecollection,我在按钮单击事件中填充了文本框。在我的项目中是一类,我有 list >> public List _RoomNumber = new List();我只想将 observablecollection 值发送到 _RoomNumber 列表中。例如,如果 observablecollection 包含这 4 个值:15、20、2323、3232,我希望 _RoomNumber 上下文相同,因此:15、20、2323、3232

我希望我的问题很清楚。 这是我的 observablecollection:

  ObservableCollection<CheckInData> _CheckInCollection = new ObservableCollection<CheckInData>();

   public ObservableCollection<CheckInData> CheckInCollection
   {
       get { return _CheckInCollection; }
   }
   public class CheckInData
   {
       public string RoomNumber { get; set; }
       public decimal Price { get; set; }
       public string Currecny { get; set; }
       public decimal Discount { get; set; }
       public string CheckOut { get; set; }
       public int TotalDay { get; set; }
       public decimal TotalPrice { get; set; }
       public int CheckOutYear { get; set; }
       public int CheckOutMonth { get; set; }
       public int CheckOutDay { get; set; }
       public Boolean IncToday { get; set; }
   }

这就是我试图放入列表的方式。问题是 observablecollection 包含 102 和 305。_RoomNumber 仅获取值“1”。请帮忙

 private void btnPrintInvoice_Click(object sender, RoutedEventArgs e)
        {
            //This is Class where my List _RoomNumber is 
            DataToExcel.Invoice inv = new DataToExcel.Invoice();
            foreach (CheckInData coll in CheckInCollection)
            {
                for (int i = 0; i < _CheckInCollection.Count; i++) 
                {
                    inv._RoomNumber.Add(coll.RoomNumber[i].ToString());
                }
            }
        }

【问题讨论】:

  • 我无法理解您在点击事件中要做什么..为什么您需要对同一个集合进行两次迭代..?据我了解,您需要将所有房间号从 CheckInCollection 获取到列表中……对吧……?

标签: c# wpf observablecollection


【解决方案1】:

您需要进行一些小修改。试试这个:

private void btnPrintInvoice_Click(object sender, RoutedEventArgs e)
{
        //This is Class where my List _RoomNumber is 
        DataToExcel.Invoice inv = new DataToExcel.Invoice();
        foreach (CheckInData coll in CheckInCollection)
        {                
            inv._RoomNumber.Add(coll.RoomNumber.ToString());                
        }
}

您不需要使用索引访问 RoomNumber。这不是一个集合。

【讨论】:

  • 没有索引它只放置第一个值。
  • @Acid。检查foreach循环是否执行了两次?
【解决方案2】:

你可以使用

var roomnumbers = CheckInCollection.Select(x => x.RoomNumber);
inv._RoomNumber = new List(roomnumbers);

或者如果您想重用现有的List 实例,

inv._RoomNumber.Clear();
inv._RoomNumber.AddRange(roomnumbers);

但这似乎不是你的情况。

请注意,在您的代码中,您的内部循环和外部循环都会迭代同一个集合 :-)

【讨论】:

    【解决方案3】:
    using System.Linq;
    ...
    
    ObservableCollection<string> ListA = new ObservableCollection<string>();
    
    List<string> ListB = ListA.ToList<string>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多