如何将列表框保存到ObservableCollection<>

时间:2011-10-22 08:13:08

标签: c# observable

MyDoc.cs

public class MyDoc
{

  public string Private {set;get;}
  public string Public  {set;get;}
}

MyFind.cs

public class MyFind
{
 public string Find {set;get;}
 public string News  {set;get;}

 private ObservableCollection<MyDoc> _list;
 public ObservableCollection<MyDoc> List
 {
       get
        {
             if (_list == null)
             {
                  _list = new ObservableCollection<MyDoc>();
             }
             return _list;
        }
       set
        {
              if (_list != value)
              {
                   _list = value;
              }
        }
 }
}

在Page1.xaml.cs

MyFind myfind = new MyFind();
myfind.Find = Findtextbox.Text;//string = string
myfind.News = Newstextbox.Text;//string = string
myfind.List = ??? 

ObservableCollection = listbox1。??? (??? = Items,或ItemsSources,或者什么,......我可以使用转换吗?)&lt; ------------我没有任何想法!救救我!

3 个答案:

答案 0 :(得分:0)

如果您已将ItemsSource属性设置为类似List的内容,则可以执行以下代码:

MyFind myFind = new MyFind();

var myDocs = simpleListBox.ItemsSource as List<MyDoc>;
myDocs.ForEach(d => myFind.List.Add(d));

答案 1 :(得分:0)

我认为您正在寻找ItemsSource属性:

MyFind myfind = new MyFind();
myfind.Find = Findtextbox.Text;
myfind.News = Newstextbox.Text;
myfind.List = new ObservableCollection<MyDoc>(listbox1.ItemsSource.Cast<MyDoc>());

这里我正在创建一个新的MyDoc对象的ObservableCollection,并且我正在传递一个IEnumerable的MyDoc项目的构造函数。因为listbox1.ItemsSource属性返回一个无类型的IEnumerable,所以我首先使用LINQ将它强制转换为正确的类型。

答案 2 :(得分:0)

为什么你想要做到这一点就在我身边!如果您使用带有Binding的ObservableCollection并从列表框中添加删除T(项),则可观察的集合将得到更新。与此内联的内容:

public class MyViewModel
{
    public ObservableCollection<MyData> List { get; set; }
}

public class MyView : UserControl
{
    public MyView()
    {
        DataContext = new MyViewModel();
    }
}

<ListBox ItemsSource="{Binding List}" />