GridViewColumn中的WPF转换器 - 保留ConvertBack-Method的值,并为每一行拥有自己的Binding-Instance

时间:2017-03-13 11:25:58

标签: c# wpf multibinding imultivalueconverter

我有一个显示材料的GridView列。 viewmodel值全部以kg保存,因为某些视图应转换并将其显示为升。使用IMultiValueConverter可以轻松完成。{/ p>

public object Convert(object[] values, ...){
    var valueInKg = (double)values[0];
    var density = (double)values[1];

    return valueInKg/density;
}

现在我在进行后向转换方面遇到了问题。我试图将输入值(密度)存储在转换器中,但确实有一个实例,因此有时会出现错误的密度值。我找到this x:shared="false" approach,但想要将转换器设置为从System.Windows.Data.MultiBinding派生的类。

public class MyBinding : MultiBinding {
    public MyBinding(){
        Converter = new MyConverter();
    }
}

我认为这将导致每个Binding的单独实例 - 它不会。我怎样才能做到这一点?

编辑: 正如this answer中mm8所建议的那样,问题在于绑定实例。在单元格模板中定义GridViewColumn上的绑定时,每列只会触发一次构造函数。所以问题是我怎样才能改变它 - 它甚至可能吗?

2 个答案:

答案 0 :(得分:0)

  

我认为这将导致每个Binding的单独实例 - 它不会。

以下肯定会创建MyConverter类的新实例:

Converter = new MyConverter();

确保为每个绑定创建MyBinding类的新实例。

你也可以在XAML中创建一个新的转换器实例,如下所示:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding>
            <MultiBinding.Converter>
                <local:MyConverter />
            </MultiBinding.Converter>
            <Binding Path="Test" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

答案 1 :(得分:0)

关于将值保留在 AreaReference a=new AreaReference("A1:G5667", null); CellReference b=new CellReference("A1"); XSSFSheet pivot_sheet=workbook.createSheet("Pivot_table"); XSSFPivotTable pivotTable = pivot_sheet.createPivotTable(a,b,spreadsheet); pivotTable.addRowLabel(6); pivotTable.addRowLabel(0); pivotTable.addRowLabel(2); pivotTable.addRowLabel(3); pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 4,"Sum"); 方法中:如果我对您的理解正确,则可以在ConvertBack函数中使用Binding.DoNothing。示例:

ConvertBack