wpfdatagrid 相关问题

Windows Presentation Foundation(WPF)应用程序的新增和改进的DataGrid控件。可以绑定到多个数据源。灵活的可编程渲染选项,以匹配自定义用户界面。

WPF DataGrid:重新排序行?

我正在创建一个 WPF 数据网格,我希望能够通过拖放对行重新排序,如下所示:我单击一行并将其向上或向下拖动。正如我所做的那样,一个标记显示了该行将被放置的位置...

回答 3 投票 0

在 AddNew 或 EditItem 事务 mvvm 期间不允许 WPF DataGrid“刷新”

我有以下网格 我有以下网格 <DataGrid x:Name="TablesDataGrid" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding FilteredModels.View}" AlternationCount="2" AutoGenerateColumns="False" CanUserSortColumns="True" CanUserReorderColumns="False" CanUserDeleteRows="False" CanUserAddRows="False" SelectionMode="Extended" IsReadOnly="False" SelectionUnit="FullRow" RowHeight="25" HorizontalAlignment="Stretch" ColumnWidth="Auto"> <DataGrid.Columns > <DataGridCheckBoxColumn Width="*" Binding="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsReadOnly="False"> <DataGridCheckBoxColumn.HeaderTemplate> <DataTemplate> <CheckBox IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.CheckAll}"/> </DataTemplate> </DataGridCheckBoxColumn.HeaderTemplate> </DataGridCheckBoxColumn> <DataGridTextColumn Header="Source Table" Binding="{Binding SourceTableFullName}" Width="4*"></DataGridTextColumn> <DataGridTextColumn Header="EDW Schema" Binding="{Binding SchemaName}" Width="2*"></DataGridTextColumn> <DataGridTextColumn Header="EDW Table" Binding="{Binding TableName}" Width="4*"></DataGridTextColumn> <DataGridTextColumn Header="Status" Binding="{Binding Status}" Width="*"></DataGridTextColumn> </DataGrid.Columns> </DataGrid> 然后我有一个 searchCommand 对视图模型中的 collectionViewSource FilteredModels 执行搜索,然后调用 this.FilteredModels.View.Refresh(); 当用户选中一些复选框并将网格发送到编辑模式,然后执行搜索时,我们会收到以下错误 WPF DataGrid 'Refresh' is not allowed during an AddNew or EditItem transaction 有没有办法在选中复选框时强制网格退出编辑模式,甚至单击搜索按钮或其他修复方法? 谢谢! 我知道现在回答已经太晚了...但对于正在寻找答案的人来说 按如下顺序使用 cancelEdit 或 commitEdit 方法两次 //用于提交 this.datagrid_layers.CommitEdit(); this.datagrid_layers.CommitEdit(); //取消 this.datagrid_layers.CancelEdit(); this.datagrid_layers.CancelEdit(); 有一个干净的 MVVM 解决方案可以解决这个问题。首先,您的 ViewModel 必须实现 IEditableObject 接口(无操作就足够了)。然而,这还不够,因为 DataGrid 不会听 IEditableObject.CancelEdit。 另一个问题是,ICollectionView和IEditableCollectionView都没有实现另一个。虽然只有 ICollectionView 可以刷新,但只有 IEditableCollectionView 可以提交/取消。幸运的是,CollectionViewSource.GetDefaultView返回的集合视图实现了both: // ViewModel.cs public class ItemVM : IEditableObject, INotifyPropertyChanged { } public class ModuleVM : INotifyPropertyChanged { ICollectionView Items { get; } public ModuleVM(ObservableCollection<ItemVM> items) { Items = CollectionViewSource.GetDefaultView(items); } public void RefreshSafely() { ((IEditableCollectionView)Items).CancelEdit(); // alterantively, CommitEdit() Items.Refresh(); } } 或者换句话说,您可以将 ICollectionView 投射到 IEditableCollectionView 并先调用 CancelEdit()。 您应该能够将所选项目转换为 IEditableObject 并对其调用 EndEdit,或调用网格 CancelEdit 方法。 这是我的解决方案,请根据您的需要进行调整。 private void CommitEditRefreshViewSafely() { ((IEditableCollectionView)MyCollectionViewList.View).CommitEdit(); MyCollectionViewList.View.Refresh(); }

回答 4 投票 0

WPF DataGrid 默认排序不起作用

我有一个 DataGrid,其中包含 XAML 列,如下所示: 我有一个 DataGrid,其中包含 XAML 列: <DataGridTextColumn Header="Time" Binding="{Binding Date, StringFormat='yyyy-MM-dd HH:mm:ss'}" SortMemberPath="Date" SortDirection="Descending" Width="130" CanUserResize="True" /> <DataGridTextColumn Header="Level" Binding="{Binding Level}" Width="60" CanUserResize="True" /> <DataGridTextColumn Header="Source" Binding="{Binding Logger}" Width="150" CanUserResize="True" /> <DataGridTextColumn Header="Message" Binding="{Binding Message}" Width="*" CanUserResize="True" /> 我将其绑定到 ObservableCollection<EalsLogEvent>,其中输入 EalsLogEvent.Date DateTime: public ObservableCollection<EalsLogEvent> LogEvents { get { return _logEvents; } } 网格视图模型使用计时器来刷新自身,网格的一切看起来都很好,除了在应用程序启动时首次加载时。然后,Time 列似乎按降序排序,但实际上是按升序排序。 为了正确排序,我必须单击列标题两次;第一次将顺序更改为升序,现在与列的内容匹配。第二次单击列标题会将其排序顺序更改回降序,这次它对列内容进行正确排序,即降序。 如果我在 _logEvents 刷新时使用 LINQ 对集合进行排序,我会丢失用户通过单击列标题为该列设置的任何顺序。如果我必须让视图告诉模型 LINQ 排序应该使用哪个顺序,那就有点糟糕了。 您可以在 XAML 中使用 CollectionViewSource 来定义默认排序。 假设我们有一个视图模型: public class ViewModel : INotifyPropertyChanged { public ObservableCollection<Item> Items { get; private set; } } 我们可以为 CollectionView 集合创建自定义 Items: <Window xmlns:l="clr-namespace:YourNamespace" xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"> <Window.DataContext> <l:ViewModel/> </Window.DataContext> <Window.Resources> <CollectionViewSource Source="{Binding Items}" x:Key="GridItems"> <CollectionViewSource.SortDescriptions> <scm:SortDescription PropertyName="Date" Direction="Descending"/> </CollectionViewSource.SortDescriptions> </CollectionViewSource> </Window.Resources> <DataGrid ItemsSource="{Binding Source={StaticResource GridItems}}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Time" Binding="{Binding Date, StringFormat='yyyy-MM-dd HH:mm:ss'}" Width="130" CanUserResize="True" /> <DataGridTextColumn Header="Level" Binding="{Binding Level}" Width="60" CanUserResize="True" /> <DataGridTextColumn Header="Source" Binding="{Binding Logger}" Width="150" CanUserResize="True" /> <DataGridTextColumn Header="Message" Binding="{Binding Message}" Width="*" CanUserResize="True" /> </DataGrid.Columns> </DataGrid> </Window> 使用这种方法,您的底层源集合(本例中为Items)将不会受到影响,排序仅发生在视图中。 正如您可以在 MSDN 中阅读的那样: 您可以将集合视图视为绑定顶部的层 源集合,允许您导航和显示 基于排序、过滤和分组查询的集合,全部无需 必须操纵底层源集合本身。如果 源集合实现了 INotifyCollectionChanged 接口, CollectionChanged 事件引发的更改将传播到 意见。 您还应该注意以下事项: 所有集合都有一个默认的 CollectionView。 WPF 始终绑定到 视图而不是集合。如果直接绑定到集合, WPF 实际上绑定到该集合的默认视图。 因此,使用 CollectionViewSource,您只需为您的集合定义一个自定义视图。 您应该在视图模型中创建 2 个属性: private ObservableCollection<EalsLogEvent> logEvents = new ObservableCollection<EalsLogEvent>(); private ICollectionView logEventsView; public ObservableCollection<EalsLogEvent> LogEvents { get { return this.logEvents; } set { this.SetProperty(ref this.logEvents, value); } } public ICollectionView LogEventsView { get { if (this.logEventsView == null) { this.logEventsView= CollectionViewSource.GetDefaultView(this.LogEvents); this.logEventsView.SortDescriptions.Add(new SortDescription("Time", ListSortDirection.Descending)); } return this.logEventsView; } } 将 DataGrid 绑定到 LogEventsView,并使用 LogEvents 添加或删除项目。 这允许默认排序和用户排序。

回答 2 投票 0

WPF 水平数据网格

我想要一个水平方向的WPF DataGrid,有人知道解决方案吗?

回答 6 投票 0

选择datagrid标题中的所有复选框及其在wpf mvvm中的绑定

我正在研究wpf(mvvm架构)。我正在使用数据网格列出复选框,并在标题中单击“全选”复选框,我希望选中所有复选框,反之亦然......

回答 4 投票 0

如何在WPF C#中获取dataGrid中单元格的大小和位置

我已经开始在 WPF 中使用 dataGrid,但是来自 WinForm,它与我习惯的有点不同.. 我现在的问题是我需要获取特定单元格的矩形(这样我就可以

回答 2 投票 0

提高 WPF DataGrid 性能

在我的 .NET 3.5 WPF 应用程序中,我有一个 WPF DataGrid,它将填充 500 列和 50 行。 App 的性能在滚动时非常非常差,或者当我执行 DataGrid.Items.Refres 时...

回答 7 投票 0

WPF DataGrid(MultiSelector?)多次引发 SelectedItems CollectionChanged 事件

我不确定这是否是 DataGrid 控件或 MultiSelector 的问题,但是当我在网格中选择多行时,每个单行都会触发 CollectionChanged 事件...

回答 3 投票 0

WPF Datagrid DataGridTextColumn 不允许小数

我无法在 DataGridTextColumn 中输入十进制值。如果 UpdateSourceTrigger = PropertyChanged,下面的链接建议我们不能输入小数值。 WPF DataGridTextColumn 绑定不&...

回答 3 投票 0

WPF DataGrid不在PropertyChanged上更新

使用NotifyPropertyChanged单击按钮更新我的数据网格时出现问题。如果我在后面的代码中设置了DataGrid.ItemsSource,它会起作用,但是如果我在xaml中设置它,它将不起作用。这是一些...

回答 3 投票 12

当选定的单元格位于该行时设置WPF DataGrid行标题的样式?

我有一个WPF DataGrid,它配置为仅允许单个单元格选择,即:-SelectionMode =“ Single” SelectionUnit =“ Cell”我想要做的是更改...的行标题的背景。

回答 2 投票 0

“从Datagrid(C#WPF)更新SQL表时,尚未初始化ConnectionString属性”

System.Data.dll中发生了'System.InvalidOperationException类型的未处理的异常。其他信息:ConnectionString属性尚未初始化。这是...

回答 2 投票 0

在WPF中调整DataGrid的标头

我应该在WPF中进行一些我不熟悉的图形更改。 xaml 中有此代码

回答 2 投票 3

[DataGrid在按下Delete键时失去焦点

我正在执行MVVM,其中将DataGrid绑定到ObservableCollection,并使用DeleteItemCommand挂接到DataGrid.InputBindings,如下所示: []

回答 4 投票 4

Cast Datagrid.SelectedItems集合到列表

我有一个类似此类的类Foo {public string prop1 {get; set;} public string prop1 {get; set;}}}带有List 的视图模型,此列表用作一个Bind的绑定...

回答 3 投票 17

当数据集为空时在WPF DataGrid中显示空白行

我正在SQL Server 2008数据库上运行SQL查询。该查询的结果显示在WPF DataGrid中。我的代码很好用,除非数据集为空。我希望用户成为...

回答 4 投票 0

带有单元格材质设计PackIcon的WPF Datagrid

我正在尝试使用在C#中生成的几列填充一个数据网格。其中一列是PackIcon或PackIconMaterial,另一列是带有多个文本列的复选框。图像将...

回答 1 投票 0

是否可以立即公开DataGridComboBoxColumn?

是否可以在加载数据网格时使WPF工具包数据网格的DataGridComboBoxColumn暴露在外?默认情况下,您必须单击单元格以显示组合框。我希望用户看到...

回答 3 投票 4

WPF DataGrid DataContext非常慢

我有一个正在使用的简单WPF应用程序,该应用程序执行SQL查询并在DataGrid中显示结果数据。一切都按预期进行,但性能很差。长度...

回答 6 投票 5

如何使用JSON来填充的ObservableCollection?

如何使用JSON来填充的ObservableCollection?现在只有剧本本身和桌面应用程序的模型。我不明白如何打起来。我得到它在运行脚本之后:{” ...

回答 1 投票 1

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