observablecollection 相关问题

ObservableCollection是一个.NET集合类,它在集合中添加,删除,替换,移动或重新排序项目时,或者在替换集合的整个内容时发送事件通知。

ObservableCollection 停止与 WPF Listbox 一致更新

我正在使用 WPF 并有一个列表框,我已在后面的代码中将其绑定到 ObservableCollection。 它显示在多个视图中并且工作完美(添加/删除,并保持同步

回答 1 投票 0

DynamicData - 如何绑定到分组数据

我正在使用 Roland Pheasant 的动态数据。 动态数据 我想将我的普通 C# 集合转换为 Rx。 来自一个 可观察集合> 动态...

回答 1 投票 0

如何从 ViewModel 获取 CollectionView.SelectedItems

我想从视图模型中的 CollectionView 获取所选项目。 我尝试将 SelectedItems 绑定到视图模型中 ObservableCollection 类型的属性,并将模式设置为 Two...

回答 1 投票 0

视图模型文件中的我的 ObservableCollection<T> 无法被其他文件看到

我在名为 ViewModel 的文件夹中有一个视图模型类。该文件名为 PgViewMode.cs,如下所示: 使用 CommunityToolkit.Mvvm.ComponentModel; 使用 LockAndKeyMaui.Models; 使用

回答 1 投票 0

如何使 WPF DataGrid 显示具有绑定和 DataTemplate 的 ViewModel 集合

我只是希望显示 DataGrid 内某种列表的内容。我目前正在尝试使用 ObservableCollection<> 和 DataGrid,但这可能会改变。我如何 DataTem...

回答 2 投票 0

可能会出现什么问题?我从 ObservableCollection<T> 的 OnCollectionChanged()

我当前的项目围绕读取、修改和写入字节集合。我正在通过使用 ObservableCollection 并订阅其

回答 1 投票 0

ListView 不显示来自 ViewModel 的 ObservableProperty 绑定

我是 .NET MAUI/MVVM/SQLite 和 C# 的新手。我正在尝试利用 ViewModel 来绑定模型类中的数据。我可以使用模型命名空间作为我的绑定属性,而且它

回答 1 投票 0

WPF 绑定到 DataGrid 可以部分生成列标题,但不会列出项目

我正在以 mvvm 风格和对象工厂构建一个应用程序,至于我正在学习的背景,那么相当新。 抱歉,我的研究部分代码是用德语编写的。 问题 我尝试绑定一个

回答 1 投票 0

MAUI:从 ObservableCollection 中删除最后一项时出现问题

我正在使用“ObservableCollection”保存评论。当我删除评论时,我将获取已删除的评论 ID 并从“ObservableCollection”中删除该评论。 我的问题是如果我删除...

回答 1 投票 0

从 Net Maui 中不断更新的集合中删除项目

我在视图模型中有一个方法,每次从 Binance Api 发送数据时都会更新可观察集合(指标)。但是,如果我从该列表中删除最后一项(按下按钮...

回答 1 投票 0

c# wpf MVVM 从 ObservableDictionary 获取 ObservableList

我的应用程序速度存在一些问题,并进行了一些性能分析。结果表明,我的应用程序中有很多时间花在 linq 查询上,尤其是......

回答 2 投票 0

毛伊岛 Windows 应用程序标签文本未在 UI 中更新

我的目的是更新 UI 上的 ping 状态。我在 MAUI 桌面应用程序中使用 MVVM 模式。 在 MainPage.xaml.cs 中 命名空间 MauiSamApp { 公共部分类 MainPage :ContentPage { ...

回答 1 投票 0

是否可以将 Collectionview 中的数组与 ObservableCollection 绑定?

我是新来的,也是新的 .Net Maui 开发人员。我使用 API 并通过 GET 请求接收要处理的数据。我收到的数据由包含不同数量项目的收据组成

回答 1 投票 0

如何滚动到 wpf mvvm 中数据网格中新添加的行

我有一个绑定可观察集合的数据网格。当我单击添加新按钮时,我会将新行添加到集合中。我如何实用地滚动到新行。 数据网格 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); 此行将滚动到当前添加的元素。

回答 3 投票 0

是否可以从 ObservableCollection 中隐藏 elementis ?毛伊岛网络

我正在使用 MVVM 和 Ms Toolkit。 我正在 CollectionView 中显示一个集合..但我(如果可能)想隐藏“已删除项目”(由模型上的已删除标志设置)。 这就是为什么我使用 g...

回答 1 投票 0

Xamarin Forms ListView 未从 ObservableCollection 更新

我的 XAML 文件的 ListView 正在填充一个 ViewModel,该 ViewModel 具有来自服务的 ObservableCollection,但 ListView 未显示信息。我已经检查过服务是否正常

回答 5 投票 0

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);

回答 1 投票 0

反序列化 JSON 时,如何将声明为 IList<T> 的属性的具体类型配置为 ObservableCollection<T>?

我有一些类对我期望的 JSON 文件结构进行建模。对于 JSON 中的数组值,相应的属性被声明为 IList 类型,用于 vari...

回答 1 投票 0

配置IList类型的字段在反序列化JSON时获取哪个Type

我有一些类对我期望的 JSON 文件结构进行建模。对于 JSON 中的列表字段,类中相应的属性具有 IList 类型。我不...

回答 1 投票 0

分组 Observable CollectionView 延迟加载不会在 iOS 上触发

我的 .NET MAUI 应用程序中有一个包含按类型分组的任务项的 CollectionView,当满足 ItemThreshold 时会触发按需加载。这种行为在 Android 上运行良好,但似乎并不适用

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.