IValueConverter
接口(interface)中的ConvertBack
方法有什么用。
什么时候调用?
或者 Convert
和 ConvertBack
方法的调用顺序是什么?
我在这里问这个问题是因为:我已经将 codebehind 的一个属性 绑定(bind)到 TEXTBOX 的 TEXT 属性,并且正在为该属性使用 convertor
.第一个 Convert
方法调用,当我在 TEXTBOX
中更改 TEXT
时,什么也没有发生......但是一旦我关闭表单 ConvertBack
方法调用。
最佳答案
IMO,ConvertBack
方法用于将数据的可视化表示形式转换为特定的数据类型。
例如:您使用转换器将 bool 值 true
转换为字符串 "TrueBoolean"
。此文本将显示在您的文本框中。当您更改 TextBox 的值时,ConvertBack
方法将在绑定(bind)再次触发时立即调用(默认为 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
绑定(bind)行为,您必须像这样更改绑定(bind):
<TextBox Text="{Binding MyText, UpdateSourceTrigger=PropertyChanged}"/>
<!--syntax might differ, can't access VS at the moment.-->
关于c# - IValueConverter 接口(interface)中的 ConvertBack 方法有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6424074/