ConvertBack方法在IValueConverter接口中有什么用途
本文关键字:什么 接口 方法 IValueConverter ConvertBack | 更新日期: 2023-09-27 17:59:55
ConvertBack
方法在IValueConverter
接口中有什么用途。
何时调用
或者Convert
和ConvertBack
方法的调用顺序是什么?
我在这里提出这个问题是因为:我已经将codeehind的一个属性绑定到TEXTBOX的TEXT属性,并将convertor
用于该属性。第一个Convert
方法调用,当我在TEXTBOX
中更改TEXT
时,不会发生任何事情。。。但是一旦我关闭表单,ConvertBack
方法就会调用。
IMO,ConvertBack
方法用于将数据的可视化表示转换为特定的DataType。
例如:使用Converter将布尔值true
转换为字符串"TrueBoolean"
。此文本将显示在您的文本框中。当您更改TextBox的值时,一旦绑定再次触发,就会调用ConvertBack
方法(默认为OnFocusLost)。现在,您的ConvertBack
方法将尝试将新值转换为您希望的数据类型。因此,您必须实现将"FalseBoolean"
转换为false
的逻辑。
public class Converter : IValueConverter
{
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool) value ? "TrueBoolean" : "FalseBoolean";
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var s = (string) value;
if (s.Equals("TrueBoolean",StringComparison.CurrentCultureIgnoreCase))
return true;
if (s.Equals("FalseBoolean", StringComparison.CurrentCultureIgnoreCase))
return false;
throw new Exception(string.Format("Cannot convert, unknown value {0}", value));
}
}
如果我没有记错的话,DataGrids中经常使用这种技术。
希望这有点清楚。。。
更新
评论中关于您的问题:
要覆盖默认的OnFocusLost
绑定行为,您必须像这样更改绑定:
<TextBox Text="{Binding MyText, UpdateSourceTrigger=PropertyChanged}"/>
<!--syntax might differ, can't access VS at the moment.-->
ConvertBack
是指绑定上有mode=TwoWay
。
它将用户输入转换回要绑定的数据类型,并在TextBox
(比如)失去焦点时被调用。
例如(如果这不是内置的),如果你有一个代表价格的数字,Convert
方法会取这个值,并用正确的货币符号、十进制分隔符等将其格式化为字符串。
如果用户键入一个新值,包括可能的货币符号、千位分隔符等,则可以使用ConvertBack
方法解析字符串并提取数值。
另一个例子可以是信用卡号输入。用户可以将数字输入为单个数字字符串或由空格或短划线分隔的数字组。ConvertBack
方法将接受所有这些可能的输入,并将它们转换为所需的单一格式。
检查绑定上的UpdateSourceTrigger属性。http://msdn.microsoft.com/library/system.windows.data.binding.updatesourcetrigger.aspx
默认情况下,如果文本框失去焦点,它将更新源。使用UpdateSourceTrigger,您可以将此行为设置为如果文本框内容发生更改,则立即更新源。
HTHDominik