Проверьте, является ли ObservableCollection действительным - PullRequest
1 голос
/ 18 декабря 2009

У меня есть WPF Dev Express DxGrid, который связан с ObservableCollection следующим образом.

Private _FamilyList As New ObservableCollection(Of FamilyRecord)
MyGrid.DataSource = _FamilyList

Когда пользователь начинает вводить информацию в сетку, мне нужно иметь возможность проверить, не пропустили ли они какую-то информацию, что делает ее недействительной.

Итак, каков наилучший метод проверки отсутствия ошибок валидации в _FamilyList?

1 Ответ

1 голос
/ 18 декабря 2009

У меня нет опыта работы с сеткой DevExpress, но в Xceed WPF DataGridControl есть свойство с именем UpdateSourceTrigger, которое контролирует, когда обновляется источник данных (когда пользователь заканчивает редактирование всей строки, завершает редактирование ячейка, или с каждым нажатием клавиши). Я уверен, что у DevExpress есть похожая концепция.

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

EDIT:

Чтобы при сохранении определить, есть ли у каких-либо FamilyRecord объектов в вашей коллекции ошибки, вы бы хотели что-то вроде этого:

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {

        ObservableCollection<FamilyRecord> _familyRecords;

        public Window1()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            _familyRecords = new ObservableCollection<FamilyRecord>();
            _familyRecords.Add(new FamilyRecord(@"Jones", false));
            _familyRecords.Add(new FamilyRecord(@"Smith", true));

            comboBox1.ItemsSource = _familyRecords;
        }

        // save button
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            // validate whether any records still have errors before we save.
            if (_familyRecords.Any(f => f.HasErrors))
            {
                MessageBox.Show(@"Please correct your errors!");
            }
        }


    }

    public class FamilyRecord
    {

        public FamilyRecord(string name, bool hasErrors)
        {
            Name = name;
            HasErrors = hasErrors;
        }

        public string Name { get; set; }
        public bool HasErrors { get; set; }

        public override string ToString()
        {
            return this.Name;
        }
    }
}
...