C# 在WPF数据网格中进行计算
我有一个自定义类型的集合,该集合已插入到数据网格中。datagrid显示该类型的各种属性,但我想在datagrid中包含一些“动态”列,它们是对其他列的计算 例如,这里是我的datagrid:C# 在WPF数据网格中进行计算,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个自定义类型的集合,该集合已插入到数据网格中。datagrid显示该类型的各种属性,但我想在datagrid中包含一些“动态”列,它们是对其他列的计算 例如,这里是我的datagrid: <DataGrid Margin="5, 15" Background="White" ItemsSource="{Binding StandardTrades}" SelectedItem="{Binding SelectedStandardTrade}" CanUserSortColumns="
<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>
<DataGridTextColumn IsReadOnly="true" Header="Commission total">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource AddConvertor}">
<Binding Path="Volume" />
<Binding Path="Exchange.Rate" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
如您所见,在最后一列中,我想生成一个输出,用于计算速率*体积
我该怎么做呢?我不知道如何使用转换器之前,所以如果我需要使用这个可以有人告诉我如何,请
非常感谢好的,谢谢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方法将第一个参数作为int,第二个参数作为十进制,以计算总佣金
然后,我将其插入我的XAML代码中,确保首先将转换器作为资源包含到我的类中:
<UserControl.Resources>
<converters:AddConverter x:Key="AddConvertor"/>
</UserControl.Resources>
最后,在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>
<DataGridTextColumn IsReadOnly="true" Header="Commission total">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource AddConvertor}">
<Binding Path="Volume" />
<Binding Path="Exchange.Rate" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
Google类似于“多绑定转换器wpf”。这是应该让你开始的。谢谢你的帮助,我发布了我的解决方案。