1

我正在寻找一种解决方案,当有重复 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();
}
4

0 回答 0