【问题标题】:TextBox Validation in WPF using visual studio 2012使用 Visual Studio 2012 在 WPF 中验证文本框
【发布时间】:2013-10-24 06:53:55
【问题描述】:

我是 WPF 新手,我需要对我的三个 TextBoxes 进行验证。我尝试过但未能成功,请帮助我提供所需的代码。请建议我应该在哪里进行更改和更正以获得验证

这是我的 Xaml 代码

<Window x:Class="DataGrid_DataBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="IDDATA" Height="350" Width="525">

<Label  Content="ID :" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="26" Width="27"/>
<Label  Content="Name :" HorizontalAlignment="Left" Margin="10,60,0,0" VerticalAlignment="Top" Height="26" Width="48"/>
<Label  Content="Salary :" HorizontalAlignment="Left" Margin="10,110,0,0" VerticalAlignment="Top" Height="26" Width="47"/>

<TextBox Name="tb1" HorizontalAlignment="Left" Height="20" Margin="60,10,0,0" TextWrapping="NoWrap" Text="{Binding SelectedItem.Id, ElementName=dgsample,ValidatesOnNotifyDataErrors=True,ValidatesOnExceptions=True,NotifyOnValidationError=True,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="100" />

<TextBox Name="tb2" HorizontalAlignment="Left" Height="20" Margin="60,60,0,0" TextWrapping="NoWrap" Text="{Binding SelectedItem.Name, ElementName=dgsample,ValidatesOnNotifyDataErrors=True,ValidatesOnExceptions=True,NotifyOnValidationError=True}" VerticalAlignment="Top" Width="100"/>
<TextBox Name="tb3" HorizontalAlignment="Left" Height="20" Margin="60,110,0,0" TextWrapping="NoWrap" Text="{Binding SelectedItem.Salary, ElementName=dgsample,ValidatesOnNotifyDataErrors=True,ValidatesOnExceptions=True,NotifyOnValidationError=True}" VerticalAlignment="Top" Width="100"/>

<Button Content="Get" HorizontalAlignment="Left" Margin="10,190,0,0" VerticalAlignment="Top" Width="75" Click="Get_Click" />
<Button Content="Add" HorizontalAlignment="Left" Margin="10,230,0,0" VerticalAlignment="Top" Width="75" Click="Add_Click" />
<Button Content="Delete" HorizontalAlignment="Left" Margin="10,270,0,0" VerticalAlignment="Top" Width="75" Click="Delete_Click" />

这是.cs代码

 public partial class MainWindow : Window
{

ObservableCollection<User> Users = new ObservableCollection<User>();
public MainWindow()
{
    InitializeComponent();

    Users.Add(new User() { Id = 101, Name = "allen", Salary = 10 });
    Users.Add(new User() { Id = 102, Name = "scott", Salary = 20 });
    Users.Add(new User() { Id = 103, Name = "mickey", Salary = 30 });
    Users.Add(new User() { Id = 104, Name = "micheal", Salary = 40 });
    Users.Add(new User() { Id = 105, Name = "fletch", Salary = 50 });
    Users.Add(new User() { Id = 106, Name = "etcher", Salary = 60 });

    dgsample.ItemsSource = Users;

}
private void DG1_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    switch (e.Column.Header.ToString())
    {
        case "Id":

            e.Column.Visibility = Visibility.Hidden;
            break;
        case "Name":
            e.Column.Visibility = Visibility.Hidden;
            break;
        case "Salary":
            e.Column.Visibility = Visibility.Hidden;
            break;
    }
}

private void Get_Click(object sender, RoutedEventArgs e)
{


    int index;
    if (int.TryParse(this.tb1.Text, out index))
    {
        User currentUser = Users.FirstOrDefault(Select => Select.Id == int.Parse(tb1.Text));
        if (currentUser != null)
        {
            this.tb2.Text = currentUser.Name;
            this.tb3.Text = currentUser.Salary.ToString();
        }
        else
            MessageBox.Show("User with the provided ID does not Exist", "Error");
    }
    else
        MessageBox.Show("ID entered is not valid number", "Error");





}



private void Add_Click(object sender, RoutedEventArgs e)
{


    if (!tb1.Text.Equals(""))
    {
        var adduser = Users.Where(User => User.Id == int.Parse(tb1.Text));

        if (!adduser.Any())
        {
            Users.Add(new User() { Id = int.Parse(tb1.Text), Name = tb2.Text, Salary = int.Parse(tb3.Text) });
        }

        else

            MessageBox.Show("Someone already has that ID.");

    }

}

private void Delete_Click(object sender, RoutedEventArgs e)
{
    int index;
    if (int.TryParse(this.tb1.Text, out index))
    {
        User currentUser = Users.FirstOrDefault(Select => Select.Id == int.Parse(tb1.Text));
        if (currentUser != null)
        {
            Users.Remove(currentUser);
        }
        else
            MessageBox.Show("User with the provided ID does not Exist", "Error");
    }
    else
        MessageBox.Show("ID entered is not valid number", "Error");

}

【问题讨论】:

  • 我假设您的文本框绑定到用户对象(SelectedItem) - 如果是这样,您的用户对象应该实现 INotifyDataErrorInfo

标签: c# wpf validation xaml data-binding


【解决方案1】:

您在此处WPF TextBox Validation C# 发布的相同问题似乎重复。

您是否尝试过我建议您解决的解决方案。 这很简单,只需尝试复制并粘贴整个代码并运行它。 我只添加了一个文本框来显示对用户输入数据的验证。您可以在应用程序中模拟相同的逻辑。

【讨论】:

  • 我刚刚重新尝试自己运行该解决方案,它完全可以正常工作。您能否更详细地说明什么不起作用?您是否收到任何错误(编译/运行时)??
  • 您会看到异常,因为您正在抛出异常以验证输入的数据。当您从应用程序程序集运行应用程序而不是从 VS 运行时,这不是问题。是的,您可以通过将鼠标悬停在文本框上来查看 UI 本身的错误,因为它显示在工具提示中。如果您想以其他方式显示,您可以随时更新模板样式。
  • 默认当我执行它时在文本框中显示 0 我该如何删除它
  • 您可以在声明时使用 Null 或 String.Empty 初始化您的属性,您在与 TextBoxes 绑定时使用该属性。
  • 没有什么可写的代码...你分享你的代码我会检查和编辑相同的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
相关资源
最近更新 更多