我有一个自定义类型的集合,该集合已插入到数据网格中。 datagrid显示了该类型的各种属性,但是我想在datagrid中包括一些“动态”列,这些列是对其他列的计算。
例如,这是我的数据网格:
<DataGrid Margin="5, 15" Background="White" ItemsSource="{Binding StandardTrades}" SelectedItem="{Binding SelectedStandardTrade}" CanUserSortColumns="True" CanUserAddRows="False" AutoGenerateColumns="False" materialDesign:DataGridAssist.CellPadding="13 20 8 8" materialDesign:DataGridAssist.ColumnHeaderPadding="8">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="true" Binding="{Binding TradeDate, StringFormat={}{0:dd/MM/yyyy}}" Header="Trade Date" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />
<DataGridTextColumn IsReadOnly="true" Header="Client" Binding="{Binding Exchange.Client.Name}" />
<DataGridTextColumn IsReadOnly="true" Header="Clearer" Binding="{Binding Exchange.Clearer.Name}" />
<DataGridTextColumn IsReadOnly="true" Header="Exchange" Binding="{Binding Exchange.ExchangeCode}" />
<DataGridTextColumn IsReadOnly="true" Header="CCY" Binding="{Binding Exchange.Currency.Code}" />
<DataGridTextColumn IsReadOnly="true" Header="B/S" Binding="{Binding BOrS}" />
<DataGridTextColumn IsReadOnly="true" Header="Product" Binding="{Binding Product}" />
<DataGridTextColumn IsReadOnly="true" Header="Volume" Binding="{Binding Volume}" />
<DataGridTextColumn IsReadOnly="true" Header="Maturity" Binding="{Binding Maturity}" />
<DataGridTextColumn IsReadOnly="true" Header="Reference" Binding="{Binding Reference}" />
<DataGridTextColumn IsReadOnly="true" Header="Price" Binding="{Binding Price}" />
<DataGridTextColumn IsReadOnly="true" Header="Rate" Binding="{Binding Exchange.Rate}" />
<DataGridTextColumn IsReadOnly="true" Header="Commission total" Binding="{Binding Exchange.Rate * Exchange.Volume}" />
</DataGrid.Columns>
</DataGrid>
如您所见,在最后一列上,我想生成一个计算Rate * Volume的输出。
我将如何去做?我不确定之前如何使用转换器,所以如果我需要使用转换器,有人可以告诉我如何使用吗?
非常感谢
答案 0 :(得分:0)
好,感谢Greg向我展示了多绑定转换器,直到今天我才发现它们。
这就是我提出解决方案的方式。
我创建了一个新的转换器类:
public class AddConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
decimal result = int.Parse(values[0].ToString()) * decimal.Parse(values[1].ToString());
return result.ToString(CultureInfo.InvariantCulture);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Convert方法将第一个参数作为一个整数,将第二个参数作为一个十进制,以计算总佣金。
然后我将其插入到我的XAML代码中,首先确保将转换器包含为类的资源:
<UserControl.Resources>
<converters:AddConverter x:Key="AddConvertor"/>
</UserControl.Resources>
然后最后在datagrid中实现它:
<DataGridTextColumn IsReadOnly="true" Header="Commission total">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource AddConvertor}">
<Binding Path="Volume" />
<Binding Path="Exchange.Rate" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>