Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF数据网格中进行计算_C#_Wpf_Datagrid - Fatal编程技术网

C# 在WPF数据网格中进行计算

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显示该类型的各种属性,但我想在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>
<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”。这是应该让你开始的。谢谢你的帮助,我发布了我的解决方案。