在查看下面的代码时,我无法找出this.AddRange(hoteltasks);在第21行。
我想知道AddRange方法将hoteltasks的元素添加到哪个集合。
public class HotelViewModel : ObservableRangeCollection<RoomViewModel>, INotifyPropertyChanged
{
// It's a backup variable for storing TaskViewModel objects
private ObservableRangeCollection<RoomViewModel> hoteltasks = new ObservableRangeCollection<RoomViewModel>();
public HotelViewModel()
{
}
public HotelViewModel(Hotel hotel, bool expanded = false)
{
this.Hotel = hotel;
this._expanded = expanded;
foreach (Room task in hotel.Tasks)
{
hoteltasks.Add(new RoomViewModel(task));
}
if (expanded)
this.AddRange(hoteltasks);
}
private bool _expanded;
public bool Expanded
{
get { return _expanded; }
set
{
if (_expanded != value)
{
_expanded = value;
OnPropertyChanged(new PropertyChangedEventArgs("Expanded"));
if (_expanded)
{
this.AddRange(hoteltasks);
}
else
{
this.Clear();
}
}
}
}
}
3条答案
按热度按时间w8ntj3qf1#
AddRange
在this
上被调用,因此hoteltasks
的内容被添加到this
。this
引用HotelViewModel
的当前示例。由于第21行在构造函数中,因此this
引用新创建的HotelViewModel
示例。在Expanded
的setter代码中,this.AddRange(hoteltasks);
再次出现。在那里,当前示例是您访问Expanded
的示例。有关更多信息,请参阅What is the meaning of "this" in C#虽然
this
是一个名为“HotelViewModel”的示例,听起来不像是集合,但它 * 实际上 * 是一个集合。这是因为它声明为继承自ObservableRangeCollection<RoomViewModel>
,所以它具有ObservableRangeCollection<RoomViewModel>
的所有行为,例如能够将RoomViewModel
存储在其中。并且能够将RoomViewModel
的范围添加到其中。sd2nnvve2#
HotelViewModel是一个列表类型的可观测范围集合
如果在某处创建新示例
那么myNewModel就是List(this.AddRange(hoteltasks);)
尝试
snvhrwxg3#
ObservableRangeCollection
继承自ObservableCollection
,ObservableCollection
继承了实现ICollection接口Collection<T>
Collection<T>
具有受保护的项目属性;https://learn.microsoft.com/en-us/dotnet/api/system.collections.objectmodel.collection-1.items?view=net-6.0
因此
this.AddRange()
在Items
属性中添加项