【问题标题】:IValueConverter Interface explaiantion required?需要 IValueConverter 接口说明吗?
【发布时间】:2015-03-16 15:39:10
【问题描述】:

谁能解释一下 IvalueConverter 接口及其 convert() 和 convertback() 方法,特别是它们的参数:对象值、类型目标类型、对象参数、字符串语言 代码sn-p:

<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 吗?

【问题讨论】:

    标签: ivalueconverter


    【解决方案1】:

    首先您可以向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(第二个)文本框上键入时,Ruppe 文本框会更新,否则只会更新当美元文本框失去焦点时。

    重要

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

    b = a * 0.0099; //Convert
    a = b * 100;    //ConvertBack?????  
    b = a * 0.0099; //Convert is called again... and... too bad
    

    所以正确的方法是让两个文本框都绑定到 ViewModel 中的一个属性,再次,双向绑定,并实现convertback 方法,并指定UpdateSourceTrigger=PropertyChanged

    这是一个similar question,但它是用于 WPF 的,仅供参考。

    【讨论】:

    • 好的,非常感谢!但现在另一个查询是因为我的应用程序同时执行 4 种类型的转换。因此,就此而言,我想发送特定货币的符号以及美元符号,以便它以卢比和类似的方式返回金额。我使用: xmlns:sys="using:assignment1"$ 然后我试图将其作为转换参数发送!但它给了我一个错误,字符串不是名称空间的一部分。
    • Text="{Binding ElementName=txtbox1,Path=Text, Converter={StaticResource RC_converter}, ConverterParameter=$, ...,并在代码中将参数类型转换为字符串:if ((parameter as string) == "$")
    猜你喜欢
    • 1970-01-01
    • 2012-10-10
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2018-02-01
    • 1970-01-01
    相关资源
    最近更新 更多