接口中的ConvertBack
方法有什么用。IValueConverter
什么时候会被调用?
或者调用and方法的顺序是什么?Convert
ConvertBack
我在这里问了这个问题,因为:我已将代码隐藏的一个属性绑定到 TEXTBOX 的 TEXT 属性并convertor
用于该属性。第一个Convert
方法调用,当我没有任何改变TEXT
时TEXTBOX
......但是只要我关闭该ConvertBack
方法调用的表单。
接口中的ConvertBack
方法有什么用。IValueConverter
什么时候会被调用?
或者调用and方法的顺序是什么?Convert
ConvertBack
我在这里问了这个问题,因为:我已将代码隐藏的一个属性绑定到 TEXTBOX 的 TEXT 属性并convertor
用于该属性。第一个Convert
方法调用,当我没有任何改变TEXT
时TEXTBOX
......但是只要我关闭该ConvertBack
方法调用的表单。
IMO,该ConvertBack
方法用于将数据的可视化表示转换为特定的 DataType。
例如:您使用 Converter 将 boolean 转换为true
string "TrueBoolean"
。此文本将显示在您的 TextBox 中。当您更改 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 您可以将此行为设置为在文本框内容更改时立即更新源。
HTH 多米尼克