版权声明:转载请注明出处 https://blog.csdn.net/lcpskk/article/details/82431855
public partial class SourceAllocateReportView : ClientPluginBase
{
private SourceAllocateReportVM vm = new SourceAllocateReportVM();
public SourceAllocateReportView()
{
InitializeComponent();
this.DataContext = vm;
}
/// <summary>
/// 细节行高度宽度设置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void mainDataGrid_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e)
{
DataGridRow row = e.Row;
if (row != null)
{
//row.Background = new SolidColorBrush(Color.FromRgb(210,221,247));
if (e.DetailsElement != null && e.DetailsElement.FindChild<MetroDataGrid>("detailGrid") != null)
{
MetroDataGrid grid = e.DetailsElement.FindChild<MetroDataGrid>("detailGrid") as MetroDataGrid;
if (grid != null)
{
grid.Background = new SolidColorBrush(Color.FromRgb(210, 221, 247));
e.DetailsElement.Height = 30 * grid.Items.Count;
foreach (var col in grid.Columns)
{
var find = this.mainDataGrid.Columns.FirstOrDefault(p => p.Header.ToString() == col.Header.ToString());
if (find != null)
{
Binding widthBd = new Binding();
widthBd.Source = find;
widthBd.Mode = BindingMode.TwoWay;
widthBd.Path = new PropertyPath(DataGridColumn.WidthProperty);
BindingOperations.SetBinding(col, DataGridTextColumn.WidthProperty, widthBd);
//col.Width = find.ActualWidth;
}
}
}
}
}
}
/// <summary>
/// 数据加载出来初始化设置
/// </summary>
private void mainDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
DataGridRow row = e.Row;
if (row != null)
{
SourceAllocateReportModel model = row.Item as SourceAllocateReportModel;
if (model != null && model.is_extend)
{
row.DetailsVisibility = Visibility.Visible;
}
else
{
row.DetailsVisibility = Visibility.Collapsed;
}
}
}
/// <summary>
/// 点击缩放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void mainDataGrid_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
DependencyObject dep = (DependencyObject)e.OriginalSource;
while ((dep != null) && !(dep is DataGridCell) && !(dep is DataGridColumnHeader))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep is DataGridCell)
{
while ((dep != null) && !(dep is DataGridRow))
{
dep = VisualTreeHelper.GetParent(dep);
}
DataGridRow row = dep as DataGridRow;
if (row != null)
{
SourceAllocateReportModel model = row.Item as SourceAllocateReportModel;
if (model != null && model.assigned_qty != 0 && model.detailInfos != null)
{
if (row.DetailsVisibility == Visibility.Collapsed)
{
row.DetailsVisibility = Visibility.Visible;
model.is_extend = true;
}
else
{
row.DetailsVisibility = Visibility.Collapsed;
model.SelectedModelItem = null;
model.is_extend = false;
}
}
}
}
}
}
XAML:
<controls:MetroDataGrid Name="mainDataGrid"
ColumnSetFileName="SourceAllocateReportColumnSet.xml"
Grid.Row ="1"
ItemsSource="{Binding RetsultList}"
IsReadOnly="True"
AutoGenerateColumns="False" RowDetailsVisibilityMode="VisibleWhenSelected"
LoadingRowDetails="mainDataGrid_LoadingRowDetails"
LoadingRow="mainDataGrid_LoadingRow"
PreviewMouseLeftButtonUp="mainDataGrid_PreviewMouseLeftButtonUp">
<!--<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<EventSetter Event="MouseUp" Handler="Item_MouseUp"/>
</Style>
</DataGrid.RowStyle>-->
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<WrapPanel Name="detailPanel" Height="auto">
<controls:MetroDataGrid
Name="detailGrid"
HeadersVisibility="None"
ItemsSource="{Binding detailInfos}"
IsReadOnly="True"
AutoGenerateColumns="False"
Background="LightBlue"
>
<controls:MetroDataGrid.Columns>
<DataGridTextColumn Header="产品" />
<DataGridTextColumn Header="交易组" />
<DataGridTextColumn Header="资产账户" />
<DataGridTextColumn Header="证券代码" />
<DataGridTextColumn Header="证券名称" />
<DataGridTextColumn Header="交易市场" />
<DataGridTextColumn Header="持仓数量" />
<DataGridTextColumn Header="持仓市值" />
<DataGridTextColumn Header="未分配券源数量" />
<DataGridTextColumn Header="未分配券源市值" />
<!-->分割线*******************************分割线<-->
<DataGridTextColumn Header="操作员名称" Binding="{Binding opor_name}" />
<DataGridTextColumn Header="已分配券源数量" Binding="{Binding source_stock_qty, StringFormat={}{0:N2}}" />
<DataGridTextColumn Header="已分配券源市值" Binding="{Binding assign_value, StringFormat={}{0:N2}}" />
</controls:MetroDataGrid.Columns>
</controls:MetroDataGrid>
</WrapPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<controls:MetroDataGrid.Columns>
<DataGridTextColumn Header="产品" Binding="{Binding pd_no, Converter={StaticResource DictConverter}, ConverterParameter=pd_no}" />
<DataGridTextColumn Header="交易组" Binding="{Binding exch_group_no, Converter={StaticResource DictConverter}, ConverterParameter=exch_group_no}" />
<DataGridTextColumn Header="资产账户" Binding="{Binding asset_acco_no, Converter={StaticResource DictConverter}, ConverterParameter=asset_acco_no}" />
<DataGridTextColumn Header="证券代码" Binding="{Binding stock_code_no, Converter={StaticResource DictConverter}, ConverterParameter=stock_code_no}" />
<DataGridTextColumn Header="证券名称" Binding="{Binding stock_code_no, Converter={StaticResource DictConverter}, ConverterParameter=stock_name}" />
<DataGridTextColumn Header="交易市场" Binding="{Binding exch_no, Converter={StaticResource DictConverter}, ConverterParameter=exch_no}" />
<DataGridTextColumn Header="持仓数量" Binding="{Binding src_qty_total, StringFormat={}{0:N2}}" />
<DataGridTextColumn Header="持仓市值" Binding="{Binding src_market_value, StringFormat={}{0:N2}}" />
<DataGridTextColumn Header="未分配券源数量" Binding="{Binding unassigned_qty, StringFormat={}{0:N2}}" />
<DataGridTextColumn Header="未分配券源市值" Binding="{Binding unassigned_value, StringFormat={}{0:N2}}" />
<DataGridTextColumn Header="操作员名称" Binding="{Binding oper_name}">
</DataGridTextColumn>
<DataGridTextColumn Header="已分配券源数量" Binding="{Binding assigned_qty, StringFormat={}{0:N2}}" />
<DataGridTextColumn Header="已分配券源市值" Binding="{Binding assigned_value, StringFormat={}{0:N2}}" />
</controls:MetroDataGrid.Columns>
</controls:MetroDataGrid>
细节行模板自定义为一个DataGrid,和父行共享绑定数据item,绑定item的详细数据。效果如下图: