Как заставить приложение WPF открывать только одно новое окно или создавать только один экземпляр XAML при нажатии кнопки в MainWindow? - PullRequest
1 голос
/ 27 июня 2019

У меня есть приложение WPF, а вот структура приложения:

Просмотры

MainWindow.xaml, ABC.xaml (все с файлами .cs)

ViewModels

MainWindowVM.cs, ABCVM.cs

У меня есть кнопка в MainWindow.xaml (привязана к MainWindowVM.cs ), которая вызывает функцию SampleFunction () в MainWindowVM.cs , когда щелкнув, SampleFunction () затем создаст новый экземпляр ABC.xaml (привязанный к ABCVM.cs ) и откроет новое окно ABC.xaml , используя Функция Show ().

Как я могу убедиться, что нажатие кнопки в MainWindow не откроет другое новое окно ABC.xaml , когда старое окно все еще там, или не создаст другой новый экземпляр ABC. XAML

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    /*...Some other codes...*/

    private MainWindowVM _VM = new MainWindowVM();
    public MainWindowVM MainWindowVM 
    { 
        get { return _VM; } 
        set { _VM= value; } 
    }
    public MainWindow()
    {
       InitializeComponent();
       this.DataContext = MainWindowVM;      
    }
    private void SomeControl_MouseLeftButtonUp(object sender,MouseButtonEventArgs e)
    {
       MainWindowVM.SampleFunction();
    }
}

MainWindowVM.cs

public class MainWindowVM
{
    /*...Some other codes...*/

     public void SampleFunction()
     {
         ABC abc= new ABC();
         abc.Show();
     }
}

ABC.xaml.cs

public partial class ABC: Window
{
    /*...Some other codes...*/

    private static ABCVM _abcVM= new ABCVM();
    public ABCVM ABCVM { get { return _abcVM; } set { _abcVM = value; } }
    public ABC()
    {
       InitializeComponent();
       this.DataContext = ABCVM;
    }
}

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Вы можете написать код, чтобы проверить, существует ли объект типа окна.

            for each(Window win in Application.Current.Windows)
            {
                string windowType = win.GetType().ToString();
                if (!windowType.Equals(nameSpace + "." + ABC))
                {
                   ABC abc= new ABC();
                   abc.Show();
                }
            }
0 голосов
/ 27 июня 2019

Используйте ShowDialog () вместо Show ().

Затем вы должны сначала закрыть ABC.xaml, прежде чем сможете что-то сделать в MainWindow. Поэтому вы не можете открыть второе окно ABC.xaml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...