Информация об изменениях

Сообщение Re[8]: А что собственно сделали в Prism от 28.02.2020 2:55

Изменено 28.02.2020 3:02 okon

Re[8]: А что собственно сделали в Prism
Здравствуйте, karbofos42, Вы писали:

K>Здравствуйте, okon, Вы писали:


O>>И в итоге опять спрашивается нафига еще одна сущность в виде библиотеки с именем Prism, может там это как-то красивее решается чем в примере из документации (https://prismlibrary.com/docs/wpf/dialog-service.html) ?


K>Ну, если хочется самому создавать всякие BindableBase, DialogService, прикручивать IoC и т.п. то Prism не нужен.

K>Логично, что всё, что есть в Prism, можно сделать самому
K>Можно и WPF не брать, а сделать свой, еще и кроссплатформенный.

Так в призме нету DialogService готового, только интерфейс. А реализовывать также самому надо.
В том же примере погляди, я бы еще понял если они там запилили что-то типа ChildWindow как в wpfToolkit , это хотя бы упрощает решение.

Вот все надо реализоывать вручную чтобы показать диалог. Чем это решение упрощает жизнь ?

ublic class NotificationDialogViewModel : BindableBase, IDialogAware
{
    private DelegateCommand<string> _closeDialogCommand;
    public DelegateCommand<string> CloseDialogCommand =>
        _closeDialogCommand ?? (_closeDialogCommand = new DelegateCommand<string>(CloseDialog));

    private string _message;
    public string Message
    {
        get { return _message; }
        set { SetProperty(ref _message, value); }
    }

    private string _title = "Notification";
    public string Title
    {
        get { return _title; }
        set { SetProperty(ref _title, value); }
    }

    public event Action<IDialogResult> RequestClose;

    protected virtual void CloseDialog(string parameter)
    {
        ButtonResult result = ButtonResult.None;

        if (parameter?.ToLower() == "true")
            result = ButtonResult.OK;
        else if (parameter?.ToLower() == "false")
            result = ButtonResult.Cancel;

        RaiseRequestClose(new DialogResult(result));
    }

    public virtual void RaiseRequestClose(IDialogResult dialogResult)
    {
        RequestClose?.Invoke(dialogResult);
    }

    public virtual bool CanCloseDialog()
    {
        return true;
    }

    public virtual void OnDialogClosed()
    {

    }

    public virtual void OnDialogOpened(IDialogParameters parameters)
    {
        Message = parameters.GetValue<string>("message");
    }
}



Т.е. в данном случае намного и дешевле объявить свой интерфейс чем тащить дополнительный модуль отдельную сборку ради этого.
А BindableBase есть во всех MVVM библиотеках, IoC также подключается независимо от Prism, даже когда это не интерфейсный проект.
Re[8]: А что собственно сделали в Prism
Здравствуйте, karbofos42, Вы писали:

K>Здравствуйте, okon, Вы писали:


O>>И в итоге опять спрашивается нафига еще одна сущность в виде библиотеки с именем Prism, может там это как-то красивее решается чем в примере из документации (https://prismlibrary.com/docs/wpf/dialog-service.html) ?


K>Ну, если хочется самому создавать всякие BindableBase, DialogService, прикручивать IoC и т.п. то Prism не нужен.

K>Логично, что всё, что есть в Prism, можно сделать самому
Не я понимаю вещи на которые тратится например час два и более.

K>Можно и WPF не брать, а сделать свой, еще и кроссплатформенный.

Это ты передергиваешь, все таки написать WPF это большие трудозатраты — не сравнимые с объявлением интерфейса с парой методов.

В призме нету DialogService готового, только интерфейс. А реализовывать также самому надо.
В том же примере погляди, я бы еще понял если они там запилили что-то типа ChildWindow как в wpfToolkit , это хотя бы упрощает решение.

Вот все надо реализоывать вручную чтобы показать диалог. Чем это решение упрощает жизнь ?

ublic class NotificationDialogViewModel : BindableBase, IDialogAware
{
    private DelegateCommand<string> _closeDialogCommand;
    public DelegateCommand<string> CloseDialogCommand =>
        _closeDialogCommand ?? (_closeDialogCommand = new DelegateCommand<string>(CloseDialog));

    private string _message;
    public string Message
    {
        get { return _message; }
        set { SetProperty(ref _message, value); }
    }

    private string _title = "Notification";
    public string Title
    {
        get { return _title; }
        set { SetProperty(ref _title, value); }
    }

    public event Action<IDialogResult> RequestClose;

    protected virtual void CloseDialog(string parameter)
    {
        ButtonResult result = ButtonResult.None;

        if (parameter?.ToLower() == "true")
            result = ButtonResult.OK;
        else if (parameter?.ToLower() == "false")
            result = ButtonResult.Cancel;

        RaiseRequestClose(new DialogResult(result));
    }

    public virtual void RaiseRequestClose(IDialogResult dialogResult)
    {
        RequestClose?.Invoke(dialogResult);
    }

    public virtual bool CanCloseDialog()
    {
        return true;
    }

    public virtual void OnDialogClosed()
    {

    }

    public virtual void OnDialogOpened(IDialogParameters parameters)
    {
        Message = parameters.GetValue<string>("message");
    }
}



Т.е. в данном случае намного и дешевле объявить свой интерфейс чем тащить дополнительный модуль отдельную сборку ради этого.
А BindableBase есть во всех MVVM библиотеках, IoC также подключается независимо от Prism, даже когда это не интерфейсный проект.