需要IValueConverter接口解释吗?

时间:2015-01-18 14:45:38

标签: ivalueconverter

任何人都可以解释IvalueConverter接口及其convert()和convertback()方法,特别是它们的参数:object value,Type targetType,object parameter,string language 代码段:

<StackPanel Margin="30">

    <TextBox Name="txtbox"/>
    <TextBox Text="{Binding ElementName=txtbox,Path=Text,Converter={StaticResource RC_converter}}" FontSize="14" />

</StackPanel>



public object Convert(object value, Type targetType, object parameter, string language)
{
    double pkr;
    double dollar = 0.0;
    if (double.TryParse(value.ToString(), out pkr))
    {
        dollar = pkr * 0.0099;
    }
    return dollar;
}

其次,如果我在文本框中输入卢比金额,上面的方法给我货币美元。那么如果我从第二个文本框中更改美元金额怎么办?我是否需要为此目的使用convertback?

1 个答案:

答案 0 :(得分:0)

首先,您可以转向MSDN以获取有关参数的说明。它们在备注部分详细解释。

根据您的使用情况,您只需使用Convert方法中的第一个参数 - 即卢比金额 - 并乘以固定比率,然后返回美元金额。

第二个问题:我应该说这是一个有趣的问题。

你是对的,如果你实现了转换,那么一切都将几乎工作。

<TextBox Name="txtbox1" />
<TextBox Name="txtbox2" Text="{Binding ElementName=txtbox1,Path=Text, Mode=TwoWay, Converter={StaticResource RC_converter}, UpdateSourceTrigger=PropertyChanged}" />

您需要添加Mode=TwoWay以便调用ConvertBack,并UpdateSourceTrigger=PropertyChanged这样当您在Dollar(第二个)文本框中输入时,{{1} } textbox已更新 - 否则仅在Dollar文本框失去焦点时才会更新。

重要

我说它将几乎工作,因为两个相互绑定的文本框是一个奇怪的循环链。您输入了卢比金额并更新了金额,这将更新卢比金额。你会看到这个问题。

Ruppe

所以正确的方法是,让两个文本框都绑定到ViewModel中的属性,再次,双向绑定,并实现b = a * 0.0099; //Convert a = b * 100; //ConvertBack????? b = a * 0.0099; //Convert is called again... and... too bad 方法,并指定convertback

这是similar question,但它适用于WPF,仅供参考。