加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – GridViewColumn中的WPF转换器 – 保留ConvertBack-Method

发布时间:2020-12-15 21:05:40 所属栏目:百科 来源:网络整理
导读:我有一个GridView,其中一些列显示材料. viewmodel值全部以kg保存,因为某些视图应转换并将其显示为升.使用IMultiValueConverter可以轻松完成. public object Convert(object[] values,...){ var valueInKg = (double)values[0]; var density = (double)values
我有一个GridView,其中一些列显示材料. viewmodel值全部以kg保存,因为某些视图应转换并将其显示为升.使用IMultiValueConverter可以轻松完成.

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();
    }
}

我假设这将导致每个绑定的单独实例 – 它不会.我怎样才能做到这一点?

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

解决方法

I assumed this will result in a separate instance for each Binding – it does not.

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

Converter = new MyConverter();

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读