См. Следующий пример:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:WpfApplication1"
SizeToContent="WidthAndHeight">
<Window.DataContext>
<src:CodeName/>
</Window.DataContext>
<TextBox Text="{Binding Code, UpdateSourceTrigger=PropertyChanged}" />
</Window>
Imports System.ComponentModel
Public Class CodeName
Implements INotifyPropertyChanged
Private m_Code As String
Public Property Code() As String
Get
Return m_Code
End Get
Set(ByVal value As String)
If Not String.IsNullOrWhiteSpace(value) Then value = "_" & value
m_Code = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Code"))
End Set
End Property
Public Event PropertyChanged(ByVal sender As Object,
ByVal e As PropertyChangedEventArgs) _
Implements INotifyPropertyChanged.PropertyChanged
End Class
Как видите, я изменяю отредактированное значение так, что когда пользователь вводит текст в TextBox
, оно обновляется, добавляя_
в его начало.
Что происходит, когда я набираю 123456789
, результат в TextBox
будет: _________987654321
не _________123456789
, как ожидалось.
Что может быть аккуратным способом исправить это?
Я не хочу, чтобы весь мой код был загрязнен событиями KeyUp и т. Д., Перемещая курсор.
С другой стороны, я хочу, чтобы это было сделано вуровень сущности.
Примечание: моя «реальная» функция - это форматирование номера телефона с тире и т. д.