我正在创建一个带有奇数文本框的wpf控件,我希望将文本转换为正确的案例。
为此,我创建了一个转换器;
Public Class TextToPropperCaseConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Dim txt As String = TryCast(parameter, String)
If Not String.IsNullOrEmpty(txt) Then
Return StrConv(txt, VbStrConv.ProperCase)
Else
Return txt.ToString
End If
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Return Nothing
End Function
End Class
然后继续引用我的xaml中的相关文本框,就像这样;
<wizard:AeroWizardWindow.Resources>
<local:TextToPropperCaseConverter x:Key="txtToPcase"/>
</wizard:AeroWizardWindow.Resources>
<TextBox Grid.Column="1" HorizontalAlignment="Left" Height="62" Margin="8,8,0,0" Grid.Row="1" TextWrapping="Wrap" Text="{Binding Address, Converter={StaticResource txtToPcase}}" AcceptsReturn="True" VerticalAlignment="Top" Width="232"/>
也许有点天真,我希望在文本框中输入的文本可以在用户输入时更改,也可以在控件失去焦点时更改,但没有任何反应。
这是否是正确的方法,或者这可能是,尽管事实上我使用MVVM并试图避免代码落后,这是一个典型的示例,其中代码背后实际上会更好?
非常感谢
答案 0 :(得分:1)
如果要实现从用户输入到ViewModel
属性的转换,则需要实现ConvertBack
。另请参阅documentation。您返回Nothing
,这意味着无论您在TextBox
中输入什么内容,Nothing
始终都是使用转化器的结果值。