次の例を参照してください。
<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などのイベントでカレットを動かしてコード全体を汚したくありません。
一方で、私はこれをエンティティレベルで実行したいと思っています。
注:私の「実際の」機能は、電話番号をダッシュなどでフォーマットしています。