Вот то, что у меня есть .... показано является частью ListView.В настоящее время происходит следующее: пользователь нажимает кнопку «Создать», чтобы создать новую строку.Пользователь может или не может вводить информацию в содержащиеся текстовые поля / комбинированные списки до нажатия кнопки Сохранить.При нажатии кнопки «Сохранить» выполняется приведенный ниже код C #, который использует VisualTreeHelper, чтобы найти все TextBoxes / ComboBoxes в ListView и убедиться, что пользователь ввел текст / выбрал элемент.Если они не имеют, он устанавливает BorderBrush красным и не позволяет ObjectContext сохранять изменения.Я знаю, что вы можете использовать ValidationRule в некоторых случаях ... но я не мог понять, как заставить его проверить новую строку, которая никогда не была выбрана / изменена до нажатия кнопки Сохранить.Это работает, но было бы любопытно, если бы был более элегантный способ.
XAML
<ListView.View>
<GridView>
<GridViewColumn x:Name="nameColumn" Header="Name" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Margin="-6,-1" >
<TextBox.Text>
<Binding Path="Name" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<me:TextInputValidator />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
C #
Stack<FrameworkElement> tree = new Stack<FrameworkElement>();
tree.Push(subcategoryListView);
while (tree.Count > 0)
{
FrameworkElement current = tree.Pop();
int count = VisualTreeHelper.GetChildrenCount(current);
for (int i = 0; i < count; ++i)
{
DependencyObject child = VisualTreeHelper.GetChild(current, i);
if (child is FrameworkElement)
tree.Push((FrameworkElement)child);
if (child is TextBox)
{
TextBox tempBox = child as TextBox;
if (string.IsNullOrEmpty(tempBox.Text))
{
tempBox.BorderBrush = new SolidColorBrush(Colors.Red);
errorsOnPage = true;
}
}
if (child is ComboBox)
{
ComboBox tempCombo = child as ComboBox;
if (tempCombo.SelectedIndex == -1)
{
tempCombo.BorderBrush = new SolidColorBrush(Colors.Red);
errorsOnPage = true;
}
}
}
}
if (!errorsOnPage)
{
dbcontext.SaveChanges();
MessageBox.Show("Saved", null, MessageBoxButton.OK, MessageBoxImage.Information);
}
else
{
MessageBox.Show("Highlighted fields are missing or invalid.", null, MessageBoxButton.OK, MessageBoxImage.Stop);
}
}
catch (Exception ex)
{
MessageBox.Show("Error encountered while saving", null, MessageBoxButton.OK, MessageBoxImage.Stop);
}