C# 文本框字母组之间的自定义空格(用于电话号码)

C# 文本框字母组之间的自定义空格(用于电话号码),c#,string,windows-phone-7,textbox,C#,String,Windows Phone 7,Textbox,我有这个: <TextBox x:Name="txbPhone" Text="+420" InputScope="TelephoneNumber" Margin="9,0,9,0"/> 并将我的文本框更改为: <TextBox x:Name="txbPhone" Text="{Binding Path=Phone, Converter={StaticResource phoneNumberConverter}, Mode=TwoWay}"

我有这个:

<TextBox x:Name="txbPhone" Text="+420" 
         InputScope="TelephoneNumber" Margin="9,0,9,0"/>
并将我的文本框更改为:

<TextBox x:Name="txbPhone" Text="{Binding Path=Phone, Converter={StaticResource phoneNumberConverter}, Mode=TwoWay}" 
                 InputScope="TelephoneNumber" Margin="9,0,9,0" TextChanged="txbPhone_TextChanged"/>
转换器正在工作,但当我添加一些数字时,它不会改变文本。不再调用Convert方法。我该怎么做?每次我在文本框呼叫转换器中更改字母时

我的viewmodel类:

namespace SpeedCarsWP.ViewModels
{
    public class PhonePageViewModel : INotifyPropertyChanged
    {
        private string phone;
        public event PropertyChangedEventHandler PropertyChanged;

        public string Phone
        {
            get { return phone; }
            set
            {
                phone = value;
                OnPropertyChanged("Phone");
            }
        }

        public PhonePageViewModel()
        {
        }

        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }


    }
}
转换器正在工作,但当我添加一些时,它不会更改文本 数字。不再调用Convert方法。我该怎么办 这每次我在文本框呼叫转换器中更改字母时

转换器应自动更新

您确定
PhonePageViewModel
实现了
INotifyPropertyChanged

您是否在
PhonePageViewModel.Phone
setter中引发
PropertyChanged
事件

您有绑定错误吗?(调试时,请检查Visual Studio中的输出窗格)

转换器正在工作,但当我添加一些时,它不会更改文本 数字。不再调用Convert方法。我该怎么办 这每次我在文本框呼叫转换器中更改字母时

转换器应自动更新

您确定
PhonePageViewModel
实现了
INotifyPropertyChanged

您是否在
PhonePageViewModel.Phone
setter中引发
PropertyChanged
事件


您有绑定错误吗?(调试时请检查Visual Studio中的输出窗格)。

如果要使用带有数据绑定+转换器的解决方案,请实现此功能,它将适合您。(我试过了,效果很好。)

首先,在视图中,XAML部分:

    <TextBox Height="23" HorizontalAlignment="Left" Margin="78,60,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" 
             Text="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource MyConverter}}" 
             TextChanged="textBox1_TextChanged" />
如果您这样做,文本框光标将不在文本的末尾,因此您需要从视图的代码后面更正它

    private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        textBox1.Select(textBox1.Text.Length, 0);
    }

这只是使用Converter解决方案中的一种快速实现思想,但我希望它能对您有所帮助。

如果您想使用带有databinding+Converter的解决方案,请实施此方案,它将对您有效。(我试过了,效果很好。)

首先,在视图中,XAML部分:

    <TextBox Height="23" HorizontalAlignment="Left" Margin="78,60,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" 
             Text="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource MyConverter}}" 
             TextChanged="textBox1_TextChanged" />
如果您这样做,文本框光标将不在文本的末尾,因此您需要从视图的代码后面更正它

    private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        textBox1.Select(textBox1.Text.Length, 0);
    }

这只是使用Converter解决方案中的一种快速实现思想,但我希望它能帮助您。

如果您绑定值(电话号码),您可以使用带有绑定的转换器!如果您绑定了该值(电话号码),则可以使用带有绑定的转换器!看起来此解决方案可以工作,但出现错误:未找到请求的值PropertyChanged。但我在viewmodel类中实现了INotifyPropertyChanged。我编辑了上面的代码并添加了viewmodel类。我认为名称空间可能有问题。我怎样才能解决这个问题?感谢文本框,您上面提到的不包含UpdateSourceTrigger=PropertyChanged。是这样还是你只是不更新?我没有更新,但我添加了。这就是我犯的错误。对不起,这是我的错。在WP7中,默认情况下不会更改UpdateSourceTrigger=PropertyChanged。你需要实现它,你可以在这个链接上找到实现它的方法:现在它开始工作了。我只需要更改数字从左边开始填充的格式字符串,但这是另一个问题。谢谢。看起来此解决方案可以工作,但我有一个错误:找不到请求的值PropertyChanged。但我在viewmodel类中实现了INotifyPropertyChanged。我编辑了上面的代码并添加了viewmodel类。我认为名称空间可能有问题。我怎样才能解决这个问题?感谢文本框,您上面提到的不包含UpdateSourceTrigger=PropertyChanged。是这样还是你只是不更新?我没有更新,但我添加了。这就是我犯的错误。对不起,这是我的错。在WP7中,默认情况下不会更改UpdateSourceTrigger=PropertyChanged。你需要实现它,你可以在这个链接上找到实现它的方法:现在它开始工作了。我只需要更改数字从左边开始填充的格式字符串,但这是另一个问题。谢谢你。
    private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        textBox1.Select(textBox1.Text.Length, 0);
    }