如何从IEnumerable中选择元素以将它们存储在另一个IEnumerable中?

时间:2017-11-22 15:15:48

标签: c# wpf ienumerable

我已经构建了一个自定义用户控件,它具有IEnumerable作为输入,它还应该返回一个IEnumerable。这是一个灵活的控件,可以接收任何对象集合。以下是一些代码片段,可帮助您了解我的问题:

  • 项目来源

    public static readonly DependencyProperty ItemsSourceProperty =
    DependencyProperty.Register("ItemsSource", typeof(IEnumerable), typeof(MultiSelectionComboBox), new PropertyMetadata(
    new PropertyChangedCallback(OnItemsSourcePropertyChanged)));
    
    public IEnumerable ItemsSource
    {
        get { return (IEnumerable)GetValue(ItemsSourceProperty); }
        set { SetValue(ItemsSourceProperty, value); }
    }
    
  • 所选项目

    public static readonly DependencyProperty SelectedItemsProperty =
    DependencyProperty.Register("SelectedItems", typeof(IEnumerable), typeof(MultiSelectionComboBox), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
    new PropertyChangedCallback(MultiSelectionComboBox.OnSelectedItemsChanged)));
    
    public IEnumerable SelectedItems
    {
        get { return (IEnumerable)GetValue(SelectedItemsProperty); }
        set
        {
            SetValue(SelectedItemsProperty, value);
        }
    }
    

除了构建SelectedItems属性

这一部分之外,我能够完成控制工作
foreach(string s in appo)
{
  IEnumerator en = ItemsSource.GetEnumerator();
  while (en.MoveNext())
  {
      var val = en.Current;
      Type type = val.GetType();
      PropertyInfo property = type.GetProperty(DisplayMemberPath);
      if (property != null)
      {
          string name = (string)property.GetValue(val, null);
          if(name == s)
          {
              // need something here          
          }
      }
   }
}

基本上在if内部我检查了IEnumerator en的当前元素必须包含在SelectedItem中。问题是我不知道如何在输出中包含这个元素(即SelectedItems)。

如果你有更好的想法,我也会采取不同的方法

1 个答案:

答案 0 :(得分:3)

问题是const Product = mongoose.model('Product', ProductSchema) ScrapProducts() .then(mapToModel) .then(Product.create.bind(Product)) 无法添加项目。因此,您需要将其更改为具有添加方法的内容,例如IEnumerableIList