我正在使用带有RowDetails面板的WPF Datagrid,其中RowDetailsVisibilityMode设置为"VisibleWhenSelected",SelectionMode ="Extended",以便可以选择多行,从而显示RowDetails,如下所示:
<dg:DataGrid x:Name="MyGrid"
ItemsSource="{Binding Path=MyItems}"
AutoGenerateColumns="True"
SelectionMode="Extended"
RowDetailsVisibilityMode="VisibleWhenSelected">
<dg:DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="Further Details..."/>
</DataTemplate>
</dg:DataGrid.RowDetailsTemplate>
...
</dg:DataGrid>
Run Code Online (Sandbox Code Playgroud)
遗憾的是,对于此应用程序,在"选定"行上显示行详细信息并不直观,客户端希望单击多个行上的复选框以显示RowDetails窗格,还可以在网格中滚动选择其他行.换句话说,无论DataGrid上发生什么,都要修复显示RowDetails的行.
因此,目前滚动关闭他们已打开的RowDetailsPanes.我想要做的是在其中一个列中有一个复选框,并将RowDetails面板可见性绑定到此属性,但我无法弄清楚如何执行此操作.问题只是RowDetailsPane只对数据网格中的行选择进行操作 - 是否可以以某种方式扩展以对我选择的属性进行操作?
先谢谢,威尔
我有一个DataGrid,其RowDetails设置为在选中时显示(RowDetailsVisibilityMode ="VisibleWhenSelected").现在我希望能够摆脱它!我用这段代码在行细节上放了一个关闭按钮:
private void Button_Click(object sender, RoutedEventArgs e)
{
e.Handled = true;
Button button = sender as Button;
DataGridRow row = button.FindAncestor<DataGridRow>();
row.DetailsVisibility = Visibility.Collapsed;
}
Run Code Online (Sandbox Code Playgroud)
该代码在那里得到了90%,但是一旦给定行的行细节折叠,下次选择该行时就不会出现.
我有一种情况需要有条件地对wpf datagrid单元格进行readonly.DataGridCell中有IsReadOnly属性.但不幸的是,该财产是只读!有什么办法吗?
蚂蚁.
我正在使用优秀的MVVM Light Toolkit.我的ViewModel公开了:
public const string CourtCodesTypeCourtPropertyName = "CourtCodesTypeCourt";
private List<CourtType> _courtCodesTypes = new List<CourtType>();
public List<CourtType> CourtCodesTypeCourt
{
get
{
return _courtCodesTypes;
}
set
{
if (_courtCodesTypes == value)
{
return;
}
var oldValue = _courtCodesTypes;
_courtCodesTypes = value;
// Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
RaisePropertyChanged(CourtCodesTypeCourtPropertyName, oldValue, value, true);
}
}
public const string CourtCodesPropertyName = "CourtCodes";
private List<Court> _courtCodes = null;
public List<Court> CourtCodes
{
get
{
return _courtCodes;
}
set
{
if (_courtCodes == value) …Run Code Online (Sandbox Code Playgroud) 我有一个WPF DataGrid,它有一个AlternatingRowBackground画笔.它被配置为每隔一行着色.我想在鼠标上做一些突出当前行的事情.但是,样式触发器似乎输给了AlternatingRowBackground画笔.我在鼠标上获得了所需的行颜色...但仅限于未使用AlternatingRowBackground画笔绘制的行.
这是Windows中的Style.Resources:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Skins/MainSkin.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Value="Red" />
<Setter Property="FontWeight"
Value="ExtraBold" />
<Setter Property="Height"
Value="20" />
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
这是DataGrid:
<DataGrid Margin="25,15,25,0"
VerticalAlignment="Top"
ItemsSource="{Binding DocumentTypeList}"
AutoGenerateColumns="False"
Height="500"
AlternationCount="2"
FrozenColumnCount="2"
AlternatingRowBackground="{DynamicResource AlternatingRow}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Abbreviation}"
Header="Abbreviation" />
<DataGridTextColumn Binding="{Binding Title}"
Header="Title" />
<DataGridTextColumn Binding="{Binding Fee}"
Header="Fee" />
<DataGridTextColumn Binding="{Binding SpecialInstructions}"
Header="Special Instructions" />
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
有没有办法宣布绝对赢家?这个问题是一个层次结构吗?在我看来,AlternatingRowBackground画笔胜出,因为它直接与声明的最具体部分相关联.
更新: 根据@ Val的指导,这是正确的语法:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Skins/MainSkin.xaml" /> …Run Code Online (Sandbox Code Playgroud) 有人可以说明如何摆脱左边神秘的填充物吗?我尝试了很多属性但似乎没有影响.

我有一个DataGrid.但我想在CopyingRowClipboardContent事件中获得专注的细胞价值.但是e.ClipboardRowContent因为它返回了所有选定的单元格值SelectionUnit.我不能改变datagrid的选择单位.为了解决这个问题,我需要获得有针对性的细胞柱数.然后我将从中删除所有列值clipboarcContent.如何在CopyingRowClipboardContent事件中获得专注的细胞?
我已经完成了VerticalScrollBarVisibility ="已禁用",因为我不希望查看数据网格内的内容超过指定的高度.在给出上述声明后,我无法看到滚动条.但我仍然可以向下滚动并查看行.有人告诉我如何禁用所有滚动?谢谢
我使用DataGrid显示多个字段,其中一个是多行描述.网格显示数据就好了,直到我尝试通过设置隐藏标题行HeadersVisibility="Column".标题行消失但是当我滚动时,行标题会重新出现一些随机行.
我已将其缩小到显示多行描述的列.只要我离开这一栏,我就没有这个问题.我试过用两者分开线"\r\n","\n"但都没有工作.DataGrid是否支持多行文本字段?
下面是一张图片,显示了正在发生的事情以及我用来创建网格的XAML.

<DataGrid DataContext="{StaticResource personRepository}"
ItemsSource="{Binding PersonList, Mode=OneWay}"
AutoGenerateColumns="False"
HeadersVisibility="Column"
CanUserSortColumns="False"
SelectionMode="Extended"
IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Width="80" Binding="{Binding Id, Mode=OneWay}" />
<DataGridTextColumn Header="First Name" Width="150" Binding="{Binding FirstName, Mode=OneWay}" />
<DataGridTextColumn Header="Last Name" Width="150" Binding="{Binding LastName, Mode=OneWay}" />
<DataGridTextColumn Header="Description" Width="*" Binding="{Binding Description, Mode=OneWay}" />
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud) 目前我正在研究WPF应用程序(使用MVVM),我在其中显示数据DataGridView.
<DataGrid RowHeaderWidth="0" ItemsSource="{Binding PartsList,UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Item Name" IsReadOnly="True" Width="*" Binding="{Binding ProductName}"></DataGridTextColumn>
<DataGridTextColumn Header="Model Name" IsReadOnly="True" Width="*" Binding="{Binding CarModelName}"></DataGridTextColumn>
<DataGridTextColumn Header="Company Name" IsReadOnly="True" Width="*" Binding="{Binding CompanName}"></DataGridTextColumn>
<DataGridTextColumn Header="Price" IsReadOnly="True" Width="*" Binding="{Binding Rate}">
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
这里PartsList是ObservableCollection实体Part的一个.
现在我想添加自定义列到DataGrid显示折扣和另一列显示净金额.我怎样才能做到这一点?
请提出一个好主意,因为我需要处理成千上万的记录,因此性能对我来说非常重要.
先感谢您.
wpf ×10
wpfdatagrid ×10
c# ×4
.net ×3
datagrid ×3
mvvm ×2
mvvm-light ×1
wpf-controls ×1
xaml ×1