C# WPF Сохранить диалоговое (дочернее) окно открытым, если ввод неправильный
Я ищу решение не закрывать диалоговое окно при наличии дублированного идентификатора. Я думаю, это связано с DialogResult
Однако я не могу сделать ни true
или же false
Работа.
Я открываю окно "Новый магазин" по нажатию кнопки в моем главном окне.
NewStoreWindow newStore = new NewStoreWindow();
newStore.ShowDialog();
Как вы можете видеть на скриншотах ниже, вы можете ввести идентификатор и имя. Я успешно произвел проверку ввода, поэтому вы не можете нажать "ОК", когда 2 текстовых поля пусты.
Когда вы нажимаете "ОК" и идентификатор уже в моем listview
(gridview
), это даст пользователю сообщение об ошибке ниже. Однако он также закроет окно "Новый магазин". Как уже было сказано, мне бы хотелось, чтобы окно оставалось открытым до тех пор, пока оно не будет успешно добавлено, чтобы пользователь мог просто отредактировать идентификатор вместо того, чтобы снова открывать окно "Новый магазин" и вводить его снова.
Это должно только закрыть окно, когда это успешно добавлено или cancel
/X нажата. Я пытался поиграть с closing
- событие для "Нового магазина", но, похоже, не работает.
Это только спроектированное поведение? И есть ли способ обойти / обойти это?
CS
public partial class NewStoreWindow : Window
{
public static bool itemAlreadyAdded;
//public MainWindow mainWin = new MainWindow();
public bool IsDefault { get; set; }
public NewStoreWindow()
{
InitializeComponent();
//SetButtonState();
}
// Data Binding
public static readonly DependencyProperty SidProperty = DependencyProperty.Register("Sid", typeof(string), typeof(NewStoreWindow), new UIPropertyMetadata(String.Empty));
public string Sid
{
get { return (string)GetValue(SidProperty); }
set { SetValue(SidProperty, value); }
}
// Data Binding
public static readonly DependencyProperty SNameProperty = DependencyProperty.Register("SName", typeof(string), typeof(NewStoreWindow), new UIPropertyMetadata(String.Empty));
public string SName
{
get { return (string)GetValue(SNameProperty); }
set { SetValue(SNameProperty, value); }
}
private void cmdOK_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
MainWindow mainWin = new MainWindow();
// Check if any items exist in listview
if (MainWindow._list.Count == 0)
{
MainWindow._list.Add(new MainWindow.Data() { Sid = Sid, SName = SName });
}
else // items exist
{
itemAlreadyAdded = false; // use for boolean checking
foreach (var item in mainWin.lvStores.Items.OfType<MainWindow.Data>()) // loop through all items in listview
{
if (item.Sid == Sid) // Check if new item already exists
{
itemAlreadyAdded = true;
}
if (itemAlreadyAdded) // Show messagebox if it exists
{
MessageBox.Show("ID needs to be unique, please respecify!", "Duplicate ID",
MessageBoxButton.OK, MessageBoxImage.Error);
break;
}
}
if (!itemAlreadyAdded) // If it does not already exist, add it
{
// if it does not exist, create it from the textbox values
MainWindow._list.Add(new MainWindow.Data() { Sid = Sid, SName = SName });
// Refresh listview
mainWin.lvStores.Items.Refresh();
// Close Window
Close();
}
}
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
this.Hide();
}
public void Close()
{
this.Closing -= Window_Closing;
base.Close();
}