private async void New_Click(object sender, RoutedEventArgs e)
        {
            string name = NameTextBox.Text;

            if (!FilterManager.IsValidFilterName(name))
            {
                await this.ShowErrorAsync(string.Format("'{0}' is incorrect item filter name.", name));

                return;
            }

            if (FilterNames.Contains(name))
            {
                await this.ShowErrorAsync(string.Format("Item filter '{0}' already exists.", name));

                return;
            }

            // Ask whether existing game filter should be overwritten.
            if (FilterManager.GameFilterExists(name))
            {
                string msg = string.Format("Item filter '{0}.filter' already exists in game folder.\nAre you sure you want to overwrite it?", name);
                if (await this.ShowQuestionAsync(msg) == MessageBoxResult.No)
                {
                    return;
                }
            }

            Filter filter = FilterManager.Create(name);

            var window = new ItemFilterEditWindow(filter)
            {
                Owner = this
            };

            if (window.ShowDialog() == true)
            {
                bool saved = false;
                try
                {
                    FilterManager.Save(filter);

                    saved            = true;
                    NameTextBox.Text = string.Empty;
                    FilterNames.Add(name);

                    FilterManager.Enable(filter);
                }
                catch (Exception ex)
                {
                    string msg = saved ? "An error occurred while attempting to create game filter." : "An error occurred while attempting to save item filter.";
                    await this.ShowErrorAsync(msg, ex.Message);
                }
            }
        }