Ary*_*nsi 40 .net c# wpf ivalueconverter
接口中的ConvertBack
方法有什么用IValueConverter
?
什么时候打电话?
或者什么是调用的顺序的Convert
和ConvertBack
方法.
我在这里提出问题是因为:我已经将一个codebehind属性绑定到TEXTBOX的TEXT属性并使用convertor
该属性,
然后第一个Convert
方法调用,当我改变TEXT
时TEXTBOX
没有发生但只要我关闭窗体ConvertBack
方法调用.
这是什么,没有任何规则来定义何时开火 ConvertBack
方法?
注意:您可能会发现这可能与本网站上的其他问题重复...但在我撰写问题时,我发现在建议列表中没有使用任何问题.
Roe*_*elF 40
IMO,该ConvertBack
方法用于将数据的可视化表示转换为特定的DataType.
例如:您使用Converter将布尔值转换为true
字符串"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));
}
}
Run Code Online (Sandbox Code Playgroud)
如果我没有弄错的话,这种技术在DataGrids中使用了很多.
希望这有点清楚......
更新
注释中的关于您的问题:
要覆盖默认OnFocusLost
绑定行为,您必须更改绑定,如下所示:
<TextBox Text="{Binding MyText, UpdateSourceTrigger=PropertyChanged}"/>
<!--syntax might differ, can't access VS at the moment.-->
Run Code Online (Sandbox Code Playgroud)
Chr*_*isF 32
ConvertBack
是mode=TwoWay
你绑定的时候.
它将用户输入转换回您绑定的数据类型,并在TextBox
(假设)失去焦点时调用.
例如(如果这不是内置),如果你有一个数字,表示一个价格,Convert
方法将采取的值,并将其格式化成与正确的货币符号的字符串,小数点分隔符等
如果用户输入新值 - 包括可能的货币符号,千位分隔符等,您将使用该ConvertBack
方法解析字符串并提取数值.
另一个例子可能是信用卡号输入.用户可以将数字输入为由空格或短划线分隔的单个数字串或数字组.该ConvertBack
方法将采用所有这些可能的输入并将它们转换为您需要的单一格式.
归档时间: |
|
查看次数: |
22795 次 |
最近记录: |