任何人都可以解释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?
答案 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,仅供参考。