c# - IValueConverter 接口(interface)中的 ConvertBack 方法有什么用?

标签 c# .net wpf ivalueconverter

IValueConverter接口(interface)中的ConvertBack方法有什么用。

什么时候调用?

或者 ConvertConvertBack 方法的调用顺序是什么?

我在这里问这个问题是因为:我已经将 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/

相关文章:

用于缓存接受通用参数的操作的 C# 模式

c# - 计算 Unity 场景中的帧率

.net - .NET 中的 CORBA - (dis) 推荐的库?

c# - ASP.NET 使用查询字符串从 URL 下载图像文件

c# - 我如何使用 SyndicationFeed?

c# - 从 asp.net 页面调用存储过程返回在集合中找不到参数 <Column_Name>。

c# - Google Contacts API - 获取访问 token 后 (oauth)

c# - 是否可以单击 Button 而不会失去对 TextBox 的关注?

wpf - 从 WPF 截取屏幕截图

c# - 使用 c# wpf 放大 imageView 图像