我有一个xamDataGrid有两个级别的数据.(关于SO的其他问题).
很少有视觉效果可以显示一个级别的数据开始和一个秒开始的位置.看一下xamFeatureBrowser中的这个片段:

我想要的是将第二级缩进一点.RecordPresenter有一个NestedContentMargin属性,但它是只读的......
另一种方法是为每个二级网格显示某种薄页脚.
使用Infragistics XamDataGrid我遇到了一种情况,我只想在设置了某个属性时才应用Style.但是,我认为这更像是一个普通的WPF /样式问题,而不是xamDataGrid特有的.
以下风格是我目前使用的.它将checkBox添加到记录选择器区域:
<Style TargetType="{x:Type igDP:RecordSelector}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type igDP:RecordSelector}">
<CheckBox x:Name="HeaderCheckBox"
HorizontalAlignment="Center"
VerticalAlignment="Center"
IsChecked="{Binding Path=DataItem.IsChecked}">
</CheckBox>
<ControlTemplate.Triggers>
<Trigger Property="IsFilterRecord" Value="True">
<Setter TargetName="HeaderCheckBox" Property="Visibility" Value="Collapsed"/>
</Trigger>
<Trigger Property="IsAddRecord" Value="True">
<Setter TargetName="HeaderCheckBox" Property="Visibility" Value="Collapsed"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
TargetType是RecordSelector.如果记录是筛选行或添加记录行,我不想显示复选框.
我想改变它,以便如果记录是添加记录行(IsAddRecord == true),那么根本不应用该样式.我希望添加记录行保留其默认样式.
这可能吗?
我必须创建一个XamDataGrid,它显示时间范围x到y的动态数量的列.因此,我不知道用户会选择多少年来预先创建这些列.
现在通常在MVVM中,您只需通过XamDataGrid中需要Columns的多个Properties填充数据,后者只需自动生成它们.
显然我不能在运行时在我的ViewModel中创建属性,除非我用Reflection做了一些疯狂的事情.
我怎么能做到这一点?
我应该只为数据网格创建未绑定的字段并通过代码填充它们吗?我同意在这个阶段我不需要双向绑定,因为网格只是只读...只是大声思考.
这种方法是否可以不违反MVVM模式?谢谢
我正在尝试在XamDataGrid上传递项目,我右键单击鼠标右键以打开ContextMenu,它在我的ViewModel中引发了一个Command.不知何故,Command调用的方法在调试模式下无法访问.
这是从视图中剪断的
<ig:XamDataGrid DataSource="{Binding DrdResults}" Height="700" Width="600">
<ig:XamDataGrid.ContextMenu>
<ContextMenu DataContext="{Binding RelativeSource={RelativeSource Mode=Self},
Path=PlacementTarget.DataContext}"
AllowDrop="True" Name="cmAudit">
<MenuItem Header="View History"
Command="{Binding ViewTradeHistory}"
CommandParameter="{Binding Path=SelectedItems}">
</MenuItem>
</ContextMenu>
</ig:XamDataGrid.ContextMenu>
<ig:XamDataGrid.FieldSettings>
<ig:FieldSettings AllowFixing="NearOrFar"
AllowEdit="False"
Width="auto" Height="auto" />
</ig:XamDataGrid.FieldSettings>
</ig:XamDataGrid>
Run Code Online (Sandbox Code Playgroud)
此View的相应ViewModel中的代码如下所示.
public WPF.ICommand ViewTradeHistory
{
get
{
if (_viewTradeHistory == null)
{
_viewTradeHistory = new DelegateCommand(
(object SelectedItems) =>
{
this.OpenTradeHistory(SelectedItems);
});
}
return _viewTradeHistory;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,命令调用的实际方法如下所示
private void OpenTradeHistory(object records)
{
DataPresenterBase.SelectedItemHolder auditRecords
= (DataPresenterBase.SelectedItemHolder)records;
// Do something with the auditRecords now.
}
Run Code Online (Sandbox Code Playgroud)
我不确定我在这里做错了什么.任何帮助将非常感谢. …
在True MVVM模型中,我们不希望xaml.cs中有任何代码,我们也不希望viewModel具有视图引用.但是,所有第三方控件都不能为True MVVM提供良好的支持.
在我的情况下,我使用Infragistics xamDatagrid控件,我想将其数据导出到Excel.我可以将数据导出到数据网格的唯一方法是使用以下代码:
xamDataGridExcelExporter.xamDataGridExcelExporter xamDataGridExcelExporter1 =
new xamDataGridExcelExporter.xamDataGridExcelExporter();
xamDataGridExcelExporter1.Export(**this.xamDataGrid1**,
@"C:\Excel\ExportFile.xls");
Run Code Online (Sandbox Code Playgroud)
但是,XamDataGridExcelExporter将输入作为this.xamDataGrid.xamDataGrid是View not viewModel的一部分. 那么我们如何才能处理我们需要viewModel中的视图实例的情况.
让我们假设网格已绑定到数据行并具有多个列.
我发现我可以通过以下方式检索给定的列位置索引:
var fieldsLayout = grid.FieldLayouts[0];
var columnField = fieldsLayout.Fields.Single(f => f.Name == "Column Name");
int columnIndex = ... see below
Run Code Online (Sandbox Code Playgroud)
columnField.Index - 如果用户未更改初始列顺序columnField.ActualPosition.Column - 如果用户更改了初始列顺序问题是如何知道用户是否更改了初始列顺序?
我正在尝试在MVVM架构中实现XamDataGrid列visibilty,它似乎不起作用.
我正在做以下事情:
为未绑定字段添加Visiblility属性 -
<igDP:UnboundField Name="gridCustomerId"
Label="ID"
Binding="{Binding customerid,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
Visibility="{Binding ShowCustomerIDColumn,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}">
Run Code Online (Sandbox Code Playgroud)
在我的视图模型中,添加了一个可见性类型的元素:
//ToShow CustomerID Column
private Visibility showCustomerIDColumn;
public Visibility ShowCustomerIDColumn
{
get
{
return showCustomerIDColumn;
}
set
{
showCustomerIDColumn=value;
InvokePropertyChanged("ShowCustomerIDColumn");
}
}
Run Code Online (Sandbox Code Playgroud)
然后在命令处理程序中使用以下代码:
if(ShowCustomerIDColumn == Visibility.Hidden)
ShowCustomerIDColumn = Visibility.Visible;
else
ShowCustomerIDColumn = Visibility.Hidden;
InvokePropertyChanged("ShowCustomerIDColumn");
Run Code Online (Sandbox Code Playgroud)
有人有解决方案吗?
干杯,安舒曼
我的应用程序中有几个XamDataGrids,我希望所有这些都在用户更改其中的复选框后立即启用相应的"保存"按钮.这个目前不会发生,直到我离开单元格或按回车等,因为单元格仍处于编辑模式.我知道如何使用我在代码隐藏中找到的帖子来解决这个问题:
private void XamDataGrid_CellChanged(object sender, Infragistics.Windows.DataPresenter.Events.CellChangedEventArgs e)
{
e.Cell.Record.SetCellValue(e.Cell.Field, e.Editor.Value, true);
}
Run Code Online (Sandbox Code Playgroud)
但是,如何在整个应用程序中处理所有网格,而不是将其放在每个网格的代码隐藏中?我正在使用MVVM,如果可能的话,我希望不会有任何代码.如果我必须,我会,但我肯定不希望它在17个不同的网格文件背后的代码中.也许是一种行为?
我有一个WPF XamDataGrid(我正在使用MVVM模式,下面是xaml),我需要它在用户双击一行时在另一个窗口中显示记录详细信息.我有完成工作的命令,但我不知道如何像按钮一样启动它.我希望能够在用户双击一行时执行该命令,因此我需要将双击行(或其ID)作为参数发送给命令.可能吗?
<igDP:XamDataGrid DataSource="{Binding SomeList}">
<igDP:XamDataGrid.FieldLayoutSettings>
<igDP:FieldLayoutSettings AutoGenerateFields="False"/>
</igDP:XamDataGrid.FieldLayoutSettings>
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout >
<igDP:FieldLayout.Fields>
<igDP:Field Name="ObjectId" Label="Id" Width="Auto"/>
<igDP:Field Name="Description" Label="Object Description" Width="Auto"/>
</igDP:FieldLayout.Fields>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
Run Code Online (Sandbox Code Playgroud) 我试图在XamDataGrid上实现搜索(Ctrl + F)功能.如何以编程方式在网格上调用记录筛选,搜索多列中的内容并仅显示与搜索匹配的列?