ObservableCollection是一个.NET集合类,它在集合中添加,删除,替换,移动或重新排序项目时,或者在替换集合的整个内容时发送事件通知。
ObservableCollection 停止与 WPF Listbox 一致更新
我正在使用 WPF 并有一个列表框,我已在后面的代码中将其绑定到 ObservableCollection。 它显示在多个视图中并且工作完美(添加/删除,并保持同步
我正在使用 Roland Pheasant 的动态数据。 动态数据 我想将我的普通 C# 集合转换为 Rx。 来自一个 可观察集合> 动态...
如何从 ViewModel 获取 CollectionView.SelectedItems
我想从视图模型中的 CollectionView 获取所选项目。 我尝试将 SelectedItems 绑定到视图模型中 ObservableCollection 类型的属性,并将模式设置为 Two...
视图模型文件中的我的 ObservableCollection<T> 无法被其他文件看到
我在名为 ViewModel 的文件夹中有一个视图模型类。该文件名为 PgViewMode.cs,如下所示: 使用 CommunityToolkit.Mvvm.ComponentModel; 使用 LockAndKeyMaui.Models; 使用
如何使 WPF DataGrid 显示具有绑定和 DataTemplate 的 ViewModel 集合
我只是希望显示 DataGrid 内某种列表的内容。我目前正在尝试使用 ObservableCollection<> 和 DataGrid,但这可能会改变。我如何 DataTem...
可能会出现什么问题?我从 ObservableCollection<T> 的 OnCollectionChanged()
我当前的项目围绕读取、修改和写入字节集合。我正在通过使用 ObservableCollection 并订阅其
ListView 不显示来自 ViewModel 的 ObservableProperty 绑定
我是 .NET MAUI/MVVM/SQLite 和 C# 的新手。我正在尝试利用 ViewModel 来绑定模型类中的数据。我可以使用模型命名空间作为我的绑定属性,而且它
WPF 绑定到 DataGrid 可以部分生成列标题,但不会列出项目
我正在以 mvvm 风格和对象工厂构建一个应用程序,至于我正在学习的背景,那么相当新。 抱歉,我的研究部分代码是用德语编写的。 问题 我尝试绑定一个
MAUI:从 ObservableCollection 中删除最后一项时出现问题
我正在使用“ObservableCollection”保存评论。当我删除评论时,我将获取已删除的评论 ID 并从“ObservableCollection”中删除该评论。 我的问题是如果我删除...
我在视图模型中有一个方法,每次从 Binance Api 发送数据时都会更新可观察集合(指标)。但是,如果我从该列表中删除最后一项(按下按钮...
c# wpf MVVM 从 ObservableDictionary 获取 ObservableList
我的应用程序速度存在一些问题,并进行了一些性能分析。结果表明,我的应用程序中有很多时间花在 linq 查询上,尤其是......
我的目的是更新 UI 上的 ping 状态。我在 MAUI 桌面应用程序中使用 MVVM 模式。 在 MainPage.xaml.cs 中 命名空间 MauiSamApp { 公共部分类 MainPage :ContentPage { ...
是否可以将 Collectionview 中的数组与 ObservableCollection 绑定?
我是新来的,也是新的 .Net Maui 开发人员。我使用 API 并通过 GET 请求接收要处理的数据。我收到的数据由包含不同数量项目的收据组成
我有一个绑定可观察集合的数据网格。当我单击添加新按钮时,我会将新行添加到集合中。我如何实用地滚动到新行。 数据网格 XMAL 我有一个绑定可观察集合的数据网格。当我单击添加新按钮时,我会将新行添加到集合中。我如何实用地滚动到新行。 数据网格XMAL <DataGrid SelectedIndex="{Binding SelectedIntex}" IsEnabled="{Binding IsKeySet}" CanUserDeleteRows="False" CanUserAddRows="False" Name="dgwTemplateDetails" SelectionMode="Single" ItemsSource="{Binding OrderTemplateList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedOrderTemplate}" IsReadOnly="False" AutoGenerateColumns="False" Width="auto"> <DataGrid.Columns> <DataGridTextColumn Header="Srl No" Visibility="Hidden" Binding="{Binding SrlNo}"/> <DataGridTextColumn Header="Act Code" Width="75" Binding="{Binding ActCode, UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="Act Name" Width="275" Binding="{Binding ActName, UpdateSourceTrigger=PropertyChanged}"/> <DataGridTextColumn Header="No. Of Days" Width="75" Binding="{Binding NoOfDays, UpdateSourceTrigger=PropertyChanged}"/> <DataGridCheckBoxColumn Header="Is Cutting" Width="75" Binding="{Binding IsCutSelected, UpdateSourceTrigger=PropertyChanged}" /> </DataGrid.Columns> </DataGrid> VM 添加行功能 if (ValidateHeader()) { if (OrderTemplateList == null) this.OrderTemplateList = new ObservableCollection<EventManagementTemplate>(); EventManagementTemplate obJEvent = new EventManagementTemplate(); obJEvent.BuyerCode = this.BuyerCode; this.OrderTemplateList.Add(obJEvent); int no = 1; this.OrderTemplateList.ToList().ForEach(m => m.SrlNo = no++); } 您需要执行以下操作: 为您的 dataGrid 命名,以便您可以在代码隐藏文件(与包含数据网格的 xaml 文件配对的 .cs 文件)中访问它 向您的视图模型添加一个委托,以供 AddRow 函数调用 - 该委托应将您想要滚动到视图中的对象作为参数。 让包含数据网格的背后代码订阅委托==>基本上,背后的代码是提供对视图模型的回调。回调后面的代码将是滚动到新项目的代码。 回调应调用数据网格的 ScrollIntoView 函数 (http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.scrollintoview(v=vs.110).aspx) 在视图模型的添加行函数结束时(添加项目后),使用要滚动到视图中的项目调用委托。 示例代码: public class MyViewModel { // declare the delegate signature... delegate void ScrollIntoViewDelegateSignature(EventManagementTemplate objEvent); // create a pointer to the delegate that can be set by the code behind... public ScrollIntoViewDelegateSignature ScrollIntoView {get; set;} protected AddRow() { .. your code here // call the delegate... if (ScrollIntoView != null) ScrollIntoView(objEvent) } } public class MyControlOrWindowThatContainsDataGrid : UserControl/ChildWindow/Page { public void Initialize() { ...your code here // set the scrollIntoView delegate... myViewModel.ScrollIntoView = ScrollIntoView; } // create a ScrollIntoView function // ==> the return value and parameters MUST match the delegate signature public void ScrollIntoView(EventManagementTemplate objEvent) { myDataGrid.ScrollIntoView(objEvent); } } 参考 http://msdn.microsoft.com/en-us/library/900fyy8e.aspx 我认为最好使用事件来做到这一点,但这更复杂。 以下是有关如何使用事件的 msdn 文档:http://msdn.microsoft.com/en-us/library/awbftdfh.aspx 您可以为 DataGrid 创建行为。在此代码中,仅当新行添加到集合中时,它才会滚动到网格的最后一行。您可以根据任何条件修改它。有时需要添加一些延迟。如果不需要,您可以排除。 public class AutoScrollToEndBehavior : Behavior<DataGrid> { private DateTime _lastCollectionChangedTime = DateTime.MinValue; protected override void OnAttached() { base.OnAttached(); SubscribeToCollectionChanged(); } protected override void OnDetaching() { base.OnDetaching(); UnsubscribeFromCollectionChanged(); } private void SubscribeToCollectionChanged() { if (AssociatedObject.Items is ICollectionView collectionView) { collectionView.CollectionChanged += OnCollectionChanged; } } private void UnsubscribeFromCollectionChanged() { if (AssociatedObject.Items is ICollectionView collectionView) { collectionView.CollectionChanged -= OnCollectionChanged; } } private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Add) { _lastCollectionChangedTime = DateTime.Now; Task.Delay(100).ContinueWith(_ => { if ((DateTime.Now - _lastCollectionChangedTime).TotalMilliseconds > 100) { ScrollToEnd(); } }, TaskScheduler.FromCurrentSynchronizationContext()); } } private void ScrollToEnd() { if (AssociatedObject.Items.Count > 0) { var lastItem = AssociatedObject.Items[AssociatedObject.Items.Count - 1]; AssociatedObject.Dispatcher.Invoke(() => { AssociatedObject.ScrollIntoView(lastItem); }); } } } 在 XAML 中, 在 datagrid () 的结束标记上方添加以下代码 <b:Interaction.Behaviors> <behavior:AutoScrollToEndBehavior/> </b:Interaction.Behaviors> </DataGrid> 在 DataGrid 中添加项目后尝试此操作: dgwTemplateDetails.ScrollIntoView(obJEvent); 此行将滚动到当前添加的元素。
是否可以从 ObservableCollection 中隐藏 elementis ?毛伊岛网络
我正在使用 MVVM 和 Ms Toolkit。 我正在 CollectionView 中显示一个集合..但我(如果可能)想隐藏“已删除项目”(由模型上的已删除标志设置)。 这就是为什么我使用 g...
Xamarin Forms ListView 未从 ObservableCollection 更新
我的 XAML 文件的 ListView 正在填充一个 ViewModel,该 ViewModel 具有来自服务的 ObservableCollection,但 ListView 未显示信息。我已经检查过服务是否正常
MVVM - 在 .Clear 和 new 加载 ObservableCollection 之后保留选择
我有一个应用程序,它使用 SQL Select 提取 DataTable,然后将每个项目加载到每个类的 ObservableCollection 中。 视图模型: 公共可观察集合 我有一个应用程序,它使用 SQL Select 提取 DataTable,然后将每个项目加载到每个类的 ObservableCollection 中。 视图模型: public ObservableCollection<SchachtelEintrag> DataGridMainCollection { get; set; } = new ObservableCollection<SchachtelEintrag>(); private void loadDataGridMainCollection() { DataGridMainCollection.Clear(); DataTable dt = new DataTable(); dt = mySql.selectSql("SELECT id, datum, artikel, kurztext, stueckzahl, blechstaerke, rohrmasse, " + "material, kundenauftrag, ansprechpartner, abteilung, geaendertAm, twoWeeks, prio, ordnerpfad, dateiname FROM auftragstool.orders WHERE zustand = 'zu schachteln' ORDER BY import ASC, blechstaerke DESC"); if (dt.Rows.Count > 0) { foreach (DataRow r in dt.Rows) { DataGridMainCollection.Add(new SchachtelEintrag { Id = Convert.ToInt32(r["id"].ToString()), Datum = Convert.ToDateTime(r["datum"].ToString()), Artikel = r["artikel"].ToString(), Kurztext = r["kurztext"].ToString(), Stueckzahl = Convert.ToInt32(r["stueckzahl"].ToString()), Blechstaerke = r["blechstaerke"].ToString(), Rohrmasse = r["rohrmasse"].ToString(), Material = r["material"].ToString(), Kundenauftrag = r["kundenauftrag"].ToString(), Ansprechpartner = r["ansprechpartner"].ToString(), Abteilung = r["abteilung"].ToString(), GeaendertAm = r["geaendertAm"].ToString(), TwoWeeks = r["twoWeeks"].ToString(), Prio = r["prio"].ToString(), Ordnerpfad = r["ordnerpfad"].ToString(), Dateiname = r["dateiname"].ToString() }); } } } 我的 DataGrid 绑定到 ObservableCollection。 XAML: <DataGrid ItemsSource="{Binding DataGridMainCollection}" Selected="{Binding SelectedRow, Mode=TwoWay}"> 现在不同的人正在使用该程序。一旦位置被删除或添加,程序就会向 TCP 服务器发送一个字符串。 TCP 服务器将命令发送回客户端,从而重新触发以下代码: 视图模型: loadDataGridMainCollection() //Void from above 现在我知道重建 ObservableCollection 后,网格中的 SelectedItem 不再可用于选择项目。 其他人如何处理这个问题以更新整个集合而不失去焦点? 在清除集合之前,请备份当前选定的项目(或仅备份选定项目的 ID)。清除并刷新后,您必须在新填充的列表中找到您的备份项目。 这可以通过以下方式完成: int? currentlySelectedId = null; if(SelectedRow != null) currentlySelectedId = SelectedRow.Id; DataGridMainCollection.Clear(); // your code to refresh the data here if(currentlySelectedId != null) SelectedRow = DataGridMainCollection.FirstOrDefault(i => i.Id == backupItem.Id);
反序列化 JSON 时,如何将声明为 IList<T> 的属性的具体类型配置为 ObservableCollection<T>?
我有一些类对我期望的 JSON 文件结构进行建模。对于 JSON 中的数组值,相应的属性被声明为 IList 类型,用于 vari...
配置IList类型的字段在反序列化JSON时获取哪个Type
我有一些类对我期望的 JSON 文件结构进行建模。对于 JSON 中的列表字段,类中相应的属性具有 IList 类型。我不...
分组 Observable CollectionView 延迟加载不会在 iOS 上触发
我的 .NET MAUI 应用程序中有一个包含按类型分组的任务项的 CollectionView,当满足 ItemThreshold 时会触发按需加载。这种行为在 Android 上运行良好,但似乎并不适用