2013-10-24 2 views
0

Я новичок в WPF, мне нужно получить валидации для моих трех TextBoxes. Я пытался, но не смог добиться успеха, пожалуйста, помогите мне с нужным кодом. Пожалуйста, предложите мне, где я должен делать изменения и исправления, чтобы получить ValidationПроверка TextBox в WPF с помощью visual studio 2012

Это мой 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"); 

} 
+0

Я предполагаю, что ваши текстовые поля привязаны к объекту users (SelectedItem) - если ваш пользовательский объект должен реализовать INotifyDataErrorInfo – blindmeis

ответ

0

кажется дублирование же вопрос, который вы публикуемую здесь WPF TextBox Validation C#.

Вы попробовали решение, которое я предложил вам решить. Это очень просто, просто попробуйте скопировать и вставить весь код и запустить его. Я добавил только одно текстовое поле, чтобы представить проверку на введенные пользователем данные. вы можете моделировать одну и ту же логику в своем приложении.

+0

Я просто повторил попытку запустить решение самостоятельно, и он работает полностью нормально. Вы могли бы быть более сложными, чтобы рассказать, что не работает? Вы получаете какие-либо ошибки (компиляция/время выполнения)? –

+0

Вы видите исключения, потому что вы бросаете исключения для проверки введенных данных. Это не проблема, когда вы запускаете приложение из сборки приложения, а не запускаете VS. И да, вы можете увидеть ошибку в пользовательском интерфейсе, просто наведите курсор мыши на текстовое поле, поскольку оно отображается в подсказке. , если вы хотите отобразить каким-либо другим способом, вы всегда можете обновить стиль шаблона. –

+0

По умолчанию, когда я выполняю, он показывает 0 в текстовом поле. Как я могу удалить его. – user2889489