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);
}