日期:2014-05-16  浏览次数:20863 次

WPF,一个数据验证的问题

class Person
    {
        public int Age { get; set; }
    }



<Window x:Class="WPF1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WPF1"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:Person x:Key="person1"></local:Person>
        <Style TargetType="TextBox">
            <Setter Property="Text">
                <Setter.Value>
                    <Binding Source="{StaticResource person1}" Path="Age" />
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    <Grid HorizontalAlignment="Left" Height="405" VerticalAlignment="Top" Width="533">
        <TextBox Name="textbox1" HorizontalAlignment="Left" Height="23" Margin="82,247,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <Button Content="Button" HorizontalAlignment="Left" Margin="95,198,0,0" VerticalAlignment="Top" Width="75"/>
    </Grid>
</Window>


在上面的代码中,TextBox的Text属性绑定到Person对象的Age属性上,因此只能输入一个int类型的数字,当在文本框中输入一个汉字时,数据验证通不过,文本框的边框就会变成红色。
但是,现在如果在TextBox标签中设置Text值为2,如下所示:
 

<Grid HorizontalAlignment="Left" Height="405" VerticalAlignment="Top" Width="533">
        <TextBox Name="textbox1" Text="2" HorizontalAlignment="Left" Height="23" Margin="82,247,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <Button Content="Button" HorizontalAlignment="Left" Margin="95,198,0,0" VerticalAlignment="Top" Width="75"/>
    </Grid>


此时,如果在文本框中输入汉字,就不进行数据验证了,这是为什么呢?
------解决方案--------------------
数据验证的代码呢
------解决方案--------------------
优先级问题吧,如果你在Style中再添加一个属性,如:
        <Style TargetType="TextBox">
            <Setter Property="Text" Value="{Binding Source={StaticResource person1}, Path=Age, UpdateSourceTrigger=PropertyChanged}"/>
            <Setter Property="FontWeight" Value="Bold"/>
&nb