Tag: observablecollection

你如何正确绑定和更新Xamarin.Forms ListView?

使用MVVM模式,我有一个Model,ViewModel和View,它包含一个ListView。 ListView绑定到ViewModel的成员,该成员是Model类的ObservableCollection。 我可以使初始显示的绑定工作,并且可以在作用于视图时更新适当行的Model类的属性,但是我无法刷新视图,从ObservableCollection中的Model类中提取数据。 ListView类不包含使无效或强制刷新的方法,这将解决我的问题。 更新模型上的数据后,如何刷新ListView? 这是我想要做的一个简单示例:每行包含一个Button和Label。 单击按钮后,我可以更新标签,该标签将反映在屏幕上。 我需要做的是更新模型,而模型又会强制更新视图。 但是,我不能让这个工作。 在实际的应用程序中,模型的更新将在业务逻辑层中,而不是在视图中,之后我需要强制刷新ListView。 示例代码: using System; using System.Collections.ObjectModel; using Xamarin.Forms; namespace ListViewTest { public class Model { public static int ids = 0; public Model(string count) { Id = +1; Count = count; } public int Id { get; set; } public string Count { get; set; } […]

WPF ComboBox绑定到ObservableCollection

我是WPF的新手我有一个问题。 我有组织模块: class Organization : ObservableObject { public string OrganizationName { get; set; } } 我有组织的ViewModel: class OrganizationViewModel : ObservableObject { int _count = 0; public OrganizationViewModel() { Organization = new Organization {OrganizationName = “New Organization”}; } public Organization Organization { get; set; } public string OrganizationName { get { return Organization.OrganizationName; } set { […]

IQueryable to ObservableCollection 其中a =匿名类型

我希望将listview的datacontext绑定到可观察的集合。 现在我有: // CurrentEmploye = some employee Entities.DatabaseModel m = new Entities.DatabaseModel(); var q = from t in m.TimeSheet join emp in m.Employees on t.idEmployee equals emp.id where emp.id == CurrentEmploye.id select new { firstName = emp.firstName, lastName = emp.lastName, position = emp.position, clockInDate = t.clockInDate, clockOutDate = t.clockOutDate, }; listView1.DataContext = q; 该代码正确填充列表视图。 现在,每当我更新listview项时,我都想更新listview。 […]

ObservableCollection和CollectionChanged事件

为什么collectionchanged事件不会在下面的代码中触发,但是我可以看到我添加到ObservableCollection的新的InventoryBTO实例? private ObservableCollection _inventoryRecords; public ObservableCollection InventoryRecords { get { return _inventoryRecords; } set { _inventoryRecords = value; } } private InventoryBTO _selectedRecord; public InventoryBTO SelectedRecord { get { return _selectedRecord; } set { if (_selectedRecord != value) { _selectedRecord = value; OnPropertyChanged(new PropertyChangedEventArgs(“SelectedRecord”)); } } } public InventoryViewModel() { if (_inventoryRecords == null) { […]

WPF – 如何使用键(如字典)实现ObservableCollection ?

我已经使用带有WPF的ObservableCollection进行绑定,这很有效。 我现在真正想要的是像一个字典,它有一个我可以使用的键,所以有效地像“ObservableCollection”。 你能建议可以用来提供这样一个ObservableCollection的代码吗? 我的目标是拥有一个类似于Dictionary的结构,我可以从WPF绑定它。 谢谢

ObservableCollection PropertyChanged事件

好的,所以我想ObservableCollection子类,为它添加一个属性。 不幸的是, PropertyChanged事件受到保护。 基本上我想将它子类化为一个SelectedItem ,我可以绑定到我的MVVM WPF应用程序中的列表。 这是我class级的骨架: public class SelectableList : ObservableCollection { public T SelectedItem {get;set;} } 但我无法做到以下几点: SelectableList intList = new SelectableList(); intList.PropertyChanged += new PropertyChangedEventHandler(intList_Changed); 因为访问限制。 这让我提出了一个更深层次的问题。 为什么UI会收到PropertyChanged事件的通知(例如Count属性),我不能在代码隐藏中做到这一点? 我的头在旋转,有人可以赐教吗?

将多个ObservableCollections绑定到One ObservableCollection

有一堆ObservableCollection Result并要求将它们全部组合到另一个ObservableCollection AllResults这样我就可以在listview显示它。 只是不确定如何将它们合二为一。 我创建了一个新类,将它们组合在一起,但不确定在我获得列表后它们将如何更新…所以不确定要采取哪个方向。 我知道关于INotifyPropertyChanged我只是不确定如何将它们全部组合并随着一切变化而不断更新。

MVVM – 为ModelView实现’IsDirty’function以保存数据

作为WPF和MVVM的新手,我在努力学习一些基本function。 让我先解释一下我的意思,然后附上一些示例代码…… 我有一个显示用户列表的屏幕,我在右侧显示所选用户的详细信息,其中包含可编辑的文本框。 然后我有一个Save按钮,它是DataBound,但我只想在数据实际发生变化时显示此按钮。 即 – 我需要检查“脏数据”。 我有一个完整的MVVM示例,其中我有一个名为User的模型: namespace Test.Model { class User { public string UserName { get; set; } public string Surname { get; set; } public string Firstname { get; set; } } } 然后,ViewModel看起来像这样: using System.Collections.ObjectModel; using System.Collections.Specialized; using System.Windows.Input; using Test.Model; namespace Test.ViewModel { class UserViewModel : ViewModelBase { //Private […]

使用Rx(Reactive Extensions)监视ObservableCollection中的特定项

我有一个ObservableCollection,我需要引用一个特定的项目。 如果该项目不存在,我需要通过Reactive Extensions监视它是否/何时出现项目,但在设置语句时需要一些帮助。 我仍然不熟悉所有不同的Linq扩展是如何工作的,所以我不知道如何做到这一点。 谁能指出我正确的方向? 为了更好地说明,我需要类似以下内容: public class myitem :INotifyPropertyChanged { private string _key; private string _value; public string key { get { return _key; } set { _key = value; NotifyPropertyChanged(“key”); } } public string myvalue { //proper getter/setter, blah, blah } } ObservableCollection _collection = mycollection; var x = Observable.FromEvent( h => new […]

从CollectionChanged事件处理程序中的ObservableCollection中删除项

我希望能够在将一些项目添加到ObservableCollection后拒绝它们。 我无法inheritanceObservableCollection或使用任何类型的视图,因此我似乎仅限于使用定义的一个事件处理程序(CollectionChanged)对禁止的项目执行.Remove()。 如果项目在提出和处理之间的短时间内存在,那就没关系了; 这些物品应该不会留在集合中。 在CollectionChanged事件处理程序中调用.Remove()似乎不被允许。 在运行时.NET抛出InvalidOperationException: “在CollectionChanged事件期间无法更改ObservableCollection。” 我个人认为.NET应该允许我这样做。 如果我创建一个无限循环,这是我自己的错误。 我想使用的代码如下: myCollection.CollectionChanged += (sender, args) => { if (args.Action == NotifyCollectionChangedAction.Remove) return; foreach (var itm in myCollection) { if (itm.name == “Fred”) myCollection.Remove(itm); } } 我不确定我有什么选择。 使用调度程序似乎不起作用。 触发另一个事件并将.Remove调用放在另一个处理程序中是另一个想到的选项。