xaml:
!
Codebehind:
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
namespace ValidationStatus
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btn_Click(object sender, RoutedEventArgs e)
{
if (IsValid(window))
{
MessageBox.Show("saved with no error");
}
else
{
MessageBox.Show("something error");
}
}
public bool IsValid(DependencyObject parent)
{
if (Validation.GetHasError(parent))
return false;
for (int i = 0; i != VisualTreeHelper.GetChildrenCount(parent); ++i)
{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
if (!IsValid(child)) { return false; }
}
return true;
}
}
public class ViewModel : INotifyPropertyChanged
{
private User selecedItme;
public User SelecedItme
{
get { return selecedItme; }
set
{
if (selecedItme != value)
{
selecedItme = value;
OnPropertyChanged("SelecedItme");
}
}
}
private ObservableCollection users = new ObservableCollection();
public ObservableCollection Users
{
get { return users; }
set
{
if (users != value)
{
users = value;
OnPropertyChanged("Users");
}
}
}
public ViewModel()
{
Users.Add(new User() { Id = 1, Name = "user1", DiceThreshold=0.4 });
Users.Add(new User() { Id = 2, Name = "user2", DiceThreshold = 0.2 });
Users.Add(new User() { Id = 3, Name = "user3", DiceThreshold = 0.6 });
Users.Add(new User() { Id = 5, Name = "user4", DiceThreshold = 0.3 });
Users.Add(new User() { Id = 6, Name = "user5", DiceThreshold = 0.7 });
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public double DiceThreshold { get; set; }
}
public class DoubleRangeRule : ValidationRule
{
public double Min { get; set; }
public double Max { get; set; }
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
double parameter = 0;
try
{
if (((string)value).Length > 0)
{
parameter = Double.Parse((String)value);
}
}
catch (Exception e)
{
return new ValidationResult(false, "Illegal characters or " + e.Message);
}
if ((parameter < this.Min) || (parameter > this.Max))
{
return new ValidationResult(false,
"Please enter value in the range: "
+ this.Min + " - " + this.Max + ".");
}
return new ValidationResult(true, null);
}
}
}