[英]How do I allign numeric columns of a DataGrid to the right in WPF MVVM approach?
我使用 MVVM 方法將動態集合從ViewModel
綁定到datagrid
網格,如下所示:
var Data = (
from main in db.MainSaleInvoiceTbls
join detial in db.DetialSaleInvoiceTbls
on main.Id equals detial.MainSaleInvoiceId into gDate
from gdetial in gDate.DefaultIfEmpty()
where main.IsActive == true
&& main.CompanyId == UniversalInfo.UserCompany.Id
&& main.MainSaleInvoiceDataType == MainSaleInvoiceType.POInvoice
&& main.FinancialYearId == UniversalInfo.SelectedFinancialYear.Id
orderby main.Id
select
new
{
Id=main.Id,
Sr_No=0,
Date = main.Date.Value,
Voucher = main.FinancialVoucher,
Invoice_Account = main.Vendor == null ? string.Empty : main.Vendor.AccountCode,
Vendor_Name = main.Vendor == null ? string.Empty : main.Vendor.VendorName,
Vendor_Group = main.Vendor == null ? string.Empty : main.Vendor.VendorGroup.Name,
Invoice = main.SaleOrderPrefix + main.SaleOrderNumber,
Purchase_Order = main.SalesId,
Sales_Tax = "",
Invoice_Amount= gDate.Sum(x=>x.Quantity * x.UnitPrice)
});
DataGridCollection = new ObservableCollection<dynamic>(data);
XML 數據綁定到網格的代碼是:
<DataGrid x:Name="miscListDataGrid"
VerticalAlignment="Stretch"
ScrollViewer.IsDeferredScrollingEnabled="True"
VirtualizingPanel.IsContainerVirtualizable="True"
VirtualizingPanel.IsVirtualizing="True"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
ItemsSource="{Binding Path=DataGridCollection,IsAsync=True,Mode=TwoWay,NotifyOnTargetUpdated=True,NotifyOnSourceUpdated=True,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged,ValidatesOnExceptions=True}"
AutoGenerateColumns="True"
Grid.Row="2"
RowDetailsVisibilityMode="VisibleWhenSelected"
Grid.ColumnSpan="2"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserReorderColumns="False"
IsReadOnly="True"
>
</DataGrid>
我的要求是如何將數字 col 對齊到右側? 我嘗試使用AutoGeneratingColumn
和RowDetailsVisibilityChanged
事件來找出 DataGrid 何時初始化其列並觸發這些事件。 當列第一次填充到網格中時, AutoGeneratingColumn
會觸發。 它不允許將CellStyle
或Alignment
更改為右側。 如果有人可以闡明如何觸發事件以格式化列,那將真的很有幫助。
謝謝你的時間。
當DataGrid.AutogenerateColumns
設置為True
時,應使用以下代碼。
在 XAML 中手動創建列時,您只需指定DataGridBoundColumn.ElementStyle
。
在這兩種情況下, Style
都必須以TextBlock
為目標。 這是因為默認情況下,框架將生成一個TextBlock
作為單元格內容宿主(或 boolean 值的CheckBox
)。
DataGridTextColumn.ElementStyle
的單元格 alignment 是通過DataGridTextColumn
設置單元格內容宿主的TextBlock.TextAlignment
屬性來實現的。
主窗口.xaml
<Window>
<Window.Resources>
<Style x:Key="NumericDataGridCellStyle" TargetType="TextBlock">
<Setter Property="TextAlignment" Value="Right" />
</Style>
</Window.Resources>
<DataGrid AutoGenerateColumns="True"
AutoGeneratingColumn="DataGrid_OnAutoGeneratingColumn" />
</Window>
主窗口.xaml.cs
partial class MainWindow
{
private void DataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (!(e.Column is DataGridTextColumn textColumn))
{
return;
}
var columnIsNumeric = e.PropertyType == typeof(decimal)
|| e.PropertyType == typeof(int)
|| e.PropertyType == typeof(double);
if (columnIsNumeric)
{
var numericCellStyle = FindResource("NumericDataGridCellStyle") as Style;
textColumn.ElementStyle = numericCellStyle;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.