Как ViewModel должен закрыть форму?
С моей точки зрения, вопрос c-sharp довольно хороший, поскольку c-sharp тот же подход будет использоваться wpf не только для окна «Вход c# в систему», но и для любого c#.net окна. Я просмотрел много c# предложений, и ни одно из model-view-viewmodel них мне не подходит. Просмотрите c#-language мое предложение, взятое из c#-language MVVM design pattern article.
Каждый класс ViewModel должен c# наследовать от WorkspaceViewModel
, у которого mvvm есть событие RequestClose
и свойство c#.net CloseCommand
типа ICommand
. Реализация по умолчанию mvvm свойства CloseCommand
вызовет событие visual-c# RequestClose
.
Чтобы закрыть окно, необходимо c#-language переопределить метод OnLoaded
вашего model-view-viewmodel окна:
void CustomerWindow_Loaded(object sender, RoutedEventArgs e)
{
CustomerViewModel customer = CustomerViewModel.GetYourCustomer();
DataContext = customer;
customer.RequestClose += () => { Close(); };
}
или OnStartup
вашего приложения:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MainWindow window = new MainWindow();
var viewModel = new MainWindowViewModel();
viewModel.RequestClose += window.Close;
window.DataContext = viewModel;
window.Show();
}
Я c#-language полагаю, что событие RequestClose
и реализация visual-c# свойства CloseCommand
в WorkspaceViewModel
довольно ясны, но .cs-file я покажу, что они согласованы:
public abstract class WorkspaceViewModel : ViewModelBase
// There's nothing interesting in ViewModelBase as it only implements the INotifyPropertyChanged interface
{
RelayCommand _closeCommand;
public ICommand CloseCommand
{
get
{
if (_closeCommand == null)
{
_closeCommand = new RelayCommand(
param => Close(),
param => CanClose()
);
}
return _closeCommand;
}
}
public event Action RequestClose;
public virtual void Close()
{
if ( RequestClose != null )
{
RequestClose();
}
}
public virtual bool CanClose()
{
return true;
}
}
И c#.net исходный код RelayCommand
:
public class RelayCommand : ICommand
{
#region Constructors
public RelayCommand(Action
P.S. Не относитесь mvvm ко мне плохо из-за этих источников! Если c-sharp бы они были у меня вчера, это c-sharp сэкономило бы мне несколько visual-c# часов ...
P.P.S. Любые комментарии .cs-file и предложения приветствуются.
c#
wpf
mvvm
Как ViewModel должен закрыть форму?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.