我正在寻找一种解决方案,当有重复 ID 时不关闭我的对话窗口。我想这与DialogResult
,但是,我既不能做也不能true
工作false
。
我正在通过单击主窗口中的按钮打开“新商店”窗口。
NewStoreWindow newStore = new NewStoreWindow();
newStore.ShowDialog();
正如您在下面的屏幕截图中看到的那样,您可以填写 ID 和名称。我已成功进行输入验证,因此当 2 个文本框为空时,您无法按“确定”。
当您按“确定”并且 ID 已经在我的listview
( gridview
) 中时,它会给用户以下错误消息。但是,它也会关闭“新商店”窗口。如前所述,我希望窗口保持打开状态,直到成功添加,这样用户就可以编辑 ID 而不必再次打开“新商店”窗口并再次输入。
它应该仅在成功添加或cancel
按下 /X 时关闭窗口。我曾尝试closing
为“新商店”使用 -event,但它似乎不起作用。
这只是设计的行为吗?有没有办法绕过/解决它?
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();
}