2014-01-16 51 views
1

是否可以使用for/while循环创建MVVM属性?我应该在哪里放置循环?在构造函数中还是会有其他方法工作?我将使用一些其他属性或构造函数参数作为计数器。是否可以使用for/while循环创建MVVM属性?

我使用WPF 4.0

是否有可能创建一个包含ObservableCollection<string> {get: set;}即列表或数组。列表或数组中的字符串/ int属性可观察集合。

List<ObservableCollection<string> {get;set;} lt= new List<ObservableCollection<string> {get;set;}(); 

我试图做类似下面,而无需创建一个类。

public class CustomerListList : List<CustomerList> { } 

public class CustomerList : List<Customer> { } 

public class Customer 
{ 
    public int ID { get; set; } 
    public string SomethingWithText { get; set; } 
} 

我在上面的代码中找到了“The Poet”对以下问题的回答。 Creating a List of Lists in C#

+0

这不就是列表/数组的用途吗? – McGarnagle

+0

@McGarnagle你能告诉我该怎么做吗?我尝试使用for循环,但无法使其工作。 – user2330678

+5

当然,但是你可以发布你现有的代码吗?我不知道我甚至不明白你在问什么。 – McGarnagle

回答

0

那么,你可以写在你的视图模型中最通用的方式是使用ObservableCollection<ObservableCollection<object>>。我指定object,因为您要在最终收藏中使用int s或string s。

因此,在您的构造函数中创建初始列表,并在需要的地方填充它。 ObservableCollection的独特之处在于它会在某些事情发生变化时通知用户界面。

您可能遇到的唯一问题是当您更改最内层对象时,UI中将不会刷新任何内容,因为只有可观察集合在更新时发布通知。真正解决这个正确的方法是使用下面的结构:

public class Customer : INotifyPropertyChanged 
{ 
    private int _id; 
    private string _somethingWithText; 

    public int ID 
    { 
     get { return _id;} 
     set 
     { 
      _id = value; 
      OnPropertyChanged(); 
     } 
    } 

    public string SomethingWithText 
    { 
     get { return _somethingWithText; } 
     set 
     { 
      _somethingWithText = value; 
      OnPropertyChanged(); 
     } 
    } 

    public PropertyChangedEventHandler PropertyChanged; 
    protected OnPropertyChanged([CallerMemberName] string propertyName = "") 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

你用它在你的其他类这样的:每当你想要或需要

public class MainViewModel 
{ 
    public ObservableCollection<ObservableCollection<Customer>> Customers { get; set; } 

    public MainViewModel() 
    { 
     Customers = new ObservableCollection<ObservableCollection<Customer>>(); 
    } 
} 

,只需添加的东西到集合。

1

我不确定你在问什么。如果你的意思是它可以创建,然后是字符串类型的类型的ObservableCollection的列表:

List<ObservableCollection<string>> list; 

你可以通过将项目添加到这个列表循环?当然:

for (var i = 0; i < 99; i++) { 
    list.Add(new ObservableCollection<string> { "1", "2", "hi" }); 
} 
相关问题