问题标签 [collectionviewsource]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - 根据 IValueConverter 生成的属性对 CollectionView 的组进行排序
我正在使用 CollectionViewSource 的分组来显示详细信息集合的虚拟“聚合”视图;基本上是这里看到的示例:ListBox Grouping, Sorting, Subtotals and Collapsible Regions
总结示例的相关部分,您的分组可以通过 ValueConverter 从其详细信息中公开聚合属性,如下所示:
请注意,上面的 TextBlock 直接绑定到 GroupItem 的绑定,因此转换器接收整个CollectionViewGroup
及其子项,并且可以深入了解详细信息以汇总组中项目的小计。
问题是,由于这个值本身不是一个属性,是否可以按小计对组进行排序?
这显然不能由SortDescription
. 我已经看到有关 ListCollectionView 的CustomSort
属性的建议,它需要一个IComparer
实现,可以在这样的情况下使用,但我不明白如何:该Compare()
方法接收成对的细节项,无论它们的分组如何,我无法确定小计那一点。
有什么方法可以对这些组进行排序,而无需使它们本身成为实体(即在摘要级别有一个 CollectionView,在详细级别有另一个 CollectionView)?
wpf - 如何在自定义控件组合框中对项目进行分组?
我一直在尝试使用 xaml 对自定义控件组合框的项目进行分组,但我有点卡住了。我一直在阅读并发现以下代码可以产生我想要的结果,但我想将所有代码移到 GroupedImageComboBox 控件中。
我希望能够从该区域中删除对堆栈面板和项目控件的使用,并将它们放在 GroupedImageComboBox 中。有没有办法做到这一点?
提前致谢。
编辑 1。
我一直在玩模板,觉得我应该能够在 DropDown 网格中进行 collectionview 操作 - 我只是不确定如何......
wpf - 如何使用 wpf 数据绑定插入记录?
我是 wpf 的新手,所以请多多包涵
我为管理“个人资料”记录做了一个窗口
在导航和更新工作时
我似乎也无法让插入工作
这是非常简单的代码
当我按添加时,我得到一个新的空记录,当我填写它时,我看到集合看到它,因为有一个显示配置文件的 onform 列表框,它被列在那里,所以它实际上附加到列表中,但 savechanges 命令不会将其插入数据库
插入时可能会出现一些验证错误,但是我会得到一些指示,对吗?现在它只是默默地失败了。好像我从不与提交更改绑定
非常感谢您的帮助研究员
wpf - 主明细:如何添加明细记录?
这应该很简单:如果我有一个实体框架主从关系,我如何在代码中添加一个详细记录?假设我有一个名为 Book 的父表/实体和一个名为 Chapter 的子表/查找表/实体,其中包含一个 ChapterTitle 字段/属性。我希望用户能够在文本框中键入章节标题,然后单击“添加章节标题”按钮。然后,新的 ChapterTitle 将出现在通过 CollectionViewSource 绑定到 Chapters 表/实体的 ListView 中。
我没有使用 MVVM(我也没有寻求涉及 MVVM 的答案)。我正在使用此 Julie Lerman 帖子中所述的数据源窗口中的拖放操作。我的情况的不同之处在于,我没有通过数据网格显示和添加详细信息,而是使用 ListView 和文本框让用户添加新的章节标题。
拖放在 XAML 中创建了两个 CollectionViewSource 条目:
自动生成的代码如下所示:
我需要在 button_click 事件中添加什么代码才能从文本框中获取用户的章节标题并通过详细信息的 CollectionViewSource (bookChaptersViewSource) 将其添加为新的详细信息记录?我希望这很简单,但是我花了太多时间尝试却没有任何运气。提前致谢!
wpf - wpf mvvm threading.Timer 和 TimerCallback 问题
我有一个针对 MVVM 框架开发的 WPF 应用程序,其中 ViewModel 构造函数设置了一个带有 TimerCallback 的 Timer。
TimerCallback 检索 ObservableCollection 并将其传递给 VM 上的字段。
我有一个 CollectionViewSource,它的 Source 属性设置为 ObservableCollection。我正在使用 CollectionViewSource,因为我想对 Collection 启用过滤。
我发现当 TimerCallback 尝试将 ObservableCollection 传递到本地字段时,CollectionViewSource 的 Source 属性出现异常{“调用线程无法访问此对象,因为不同的线程拥有它。”}。
我理解这个例外,但我有两个问题:
- 如何解决这个问题?
- 更重要的是,为什么我只在使用 CollectionViewSource 时才会遇到这个问题?如果我删除 CollectionViewSource 并使 ObservableCollection 成为公共属性,那么我不会得到这样的异常。
任何帮助表示赞赏!谢谢, 德拉米
wpf - 从 ObservableCollection 切换 WPF ListBox ItemsSource在 MVVM 中运行时到 CollectionViewSource
我在一个绑定到 WPFView 的 MVVM 项目中有一个 ViewModel,该 WPFView 包含一个列表框,当您开始搜索时,数据会在其中异步加载。我的搜索返回的数据包含在不同日期购买的相同商品的价格。我需要按价格升序对列表框中的项目进行排序:一旦我的 BackgroundWorker 返回项目,这些项目就会异步添加到我的列表框中并按价格排序,让我在捕获时看到最优惠的价格。
我发现更好的解决方案是在我的 ViewModel 中有一个 ObservableCollection 并将它绑定到我的 ListBox 的 ItemsSource 我有一个启动异步搜索的 BackgroundWorker;我订阅了执行搜索的对象的 DataReceived EventHandler,并像这样通知 UI:
通过调度程序
这对我来说似乎没问题,但没有按我的需要订购物品,所以我发现 CollectionViewSource 以一种简单的方式完全符合我的需要。
这就是问题所在:
如果我将列表框的 datacontext 设置为 CollectionViewSource,我的设计时功能会减少,我会一直在列表框中看到我的设计时数据,但在 Blend 的“数据”选项卡中丢失了 DataContext。
所以我做了一些我认为有点脏的事情:我用 ax:Name 属性命名了我的 ListBox,并在我的 MainWindow.xaml 中添加了一些代码,以便在运行时交换我命名的列表框的数据源,如下所示:
你认为它可以被认为是一种罪过吗?
wpf - 使用 WPF 进行数据绑定 - 在输入上更新 CollectionViewSource
我按照此MSDN Walktrough的说明创建了一个示例项目。我稍微更改了示例并创建了两个额外的 TextBox 控件和一个按钮。
这就是它的样子:
我使用代码优先方法和 DbContext 的派生类作为代码生成项创建了一个简单的模型。
之后,我使用了创建的数据源:
“名称” - 文本框是只读的。当按下“搜索” - 按钮时,我想允许用户输入一个 ID 并搜索它。因此,如果可以找到指定的 ID,则应更新“名称”- TextBox。我不太关心 DataGrid,因为我的实际代码中不需要它们。
我不知道如何更新 CollectionViewSource 并验证输入,因为 CollectionViewSource.View.CurrentItem 属性是只读的。
编辑:这是我的(几乎完全是设计师生成的)代码:
c# - 数据绑定到 ComboBox 中的 CollectionViewSource 时如何保留 CurrentItem 的双向绑定
假设我们有一个简单的 VM 类
成功地将数据绑定到 ComboBox 就足够了,例如:
请注意,Person 已Equals
重载,当我在 ViewModel 中设置 CurrentPerson 值时,它会导致组合框当前项显示新值。
现在假设我想使用我的视图添加排序功能CollectionViewSource
现在组合框项目源绑定将如下所示:
它确实会被排序(如果我们添加更多项目,它会清晰可见)。
但是,当我们CurrentPerson
现在在 VM 中进行更改时(在没有 CollectionView 的情况下使用清晰绑定之前它工作正常),此更改不会显示在绑定的 ComboBox 中。
我相信在那之后为了从 VM 设置 CurrentItem,我们必须以某种方式访问视图(并且我们不会从 MVVM 中的 ViewModel 转到 View),并调用MoveCurrentTo
方法来强制 View 显示 currentItem 更改。
因此,通过添加额外的视图功能(排序),我们失去了与现有 viewModel 的 TwoWay 绑定,我认为这不是预期的行为。
有没有办法在这里保留 TwoWay 绑定?或者也许我做错了。
编辑:当我像这样重写 CurrentPerson 设置器时,实际情况可能会更复杂:
它有效
fine
!
它的错误行为,还是有解释?由于某些原因,即使Equals
重载,它也需要人对象的引用相等。
我真的不明白为什么它需要引用相等,所以我为可以解释为什么普通 setter 不起作用的人增加了赏金Equal
,当方法重载时,这可以在使用它的“修复”代码中清楚地看到
silverlight - 如果 viewSource 是静态资源,何时设置 CollectionViewSource Source 属性
我在 XAML 中得到了以下 CollectionViewSource 定义:
我有一个绑定到此 CVS 的组合框,并希望从如下代码访问视图:
但是,即使我尝试在构造函数之后InitializeComponent()
或在Loaded event
处理程序 View & Source 中访问它仍然是null
.
当应用程序在浏览器中显示给我时,虽然绑定已经发生,并且如果我现在在某处放置断点,则视图和源现在不为空。
那么 Source 到底是什么时候设置的呢?在加载我的应用程序的阶段我可以在哪里访问视图?
也许这是一个与视图源无关的一般绑定问题,什么时候设置静态资源绑定?
treeview - 代码中的 TreeView 和 HierarchicalDataTemplate
我正在尝试TreeView
仅从具有各种属性的对象的未嵌套列表中设置代码。我设置了SortDescriptions
and GroupDescriptions
,但我不知道如何HierarchicalDataTemplate
配置CollectionViewSource
配置。
有人可以给我一个纯代码示例吗?
我有:
......而且当时几乎不知道该怎么做。我希望TreeView
显示可以扩展以显示动物的类别。
谢谢。