WPF WVVM как закрыть окно с запросом?
От: varenikAA  
Дата: 14.10.19 08:56
Оценка:
Пытаюсь вот так прикрутить:
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Closing">
            <i:InvokeCommandAction Command="{Binding WindowClosing}" CommandParameter="{Binding}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>

Передаем только object, EventArgs не передает в команду.
Как сделать с минимальными усилиями?
Простой обработчик в xaml недостаточно, т.к. нужно выполнить код данные для которого доступны лишь в модели.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: WPF WVVM как закрыть окно с запросом?
От: anatolym  
Дата: 14.10.19 11:36
Оценка:
Здравствуйте, varenikAA, Вы писали:

Гугл говорит, что надо добавить PassEventArgsToCommand="True"
Re[2]: WPF WVVM как закрыть окно с запросом?
От: varenikAA  
Дата: 15.10.19 02:00
Оценка:
Здравствуйте, anatolym, Вы писали:

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


A>Гугл говорит, что надо добавить PassEventArgsToCommand="True"


Это сторонняя библиотека(лайтмввм кажется).

Я нашел рабочий код на стэке, рабочий:
  public class InteractiveCommand : TriggerAction<DependencyObject>
    {
        protected override void Invoke(object parameter)
        {
            if (base.AssociatedObject != null)
            {
                ICommand command = this.ResolveCommand();
                if ((command != null) && command.CanExecute(parameter))
                {
                    command.Execute(parameter);
                }
            }
        }

        private ICommand ResolveCommand()
        {
            ICommand command = null;
            if (this.Command != null)
            {
                return this.Command;
            }
            if (base.AssociatedObject != null)
            {
                foreach (PropertyInfo info in base.AssociatedObject.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
                {
                    if (typeof(ICommand).IsAssignableFrom(info.PropertyType) && string.Equals(info.Name, this.CommandName, StringComparison.Ordinal))
                    {
                        command = (ICommand)info.GetValue(base.AssociatedObject, null);
                    }
                }
            }
            return command;
        }

        private string commandName;
        public string CommandName
        {
            get
            {
                base.ReadPreamble();
                return this.commandName;
            }
            set
            {
                if (this.CommandName != value)
                {
                    base.WritePreamble();
                    this.commandName = value;
                    base.WritePostscript();
                }
            }
        }

        #region Command
        public ICommand Command
        {
            get { return (ICommand)GetValue(CommandProperty); }
            set { SetValue(CommandProperty, value); }
        }

        // Using a DependencyProperty as the backing store for Command.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty CommandProperty =
            DependencyProperty.Register("Command", typeof(ICommand), typeof(InteractiveCommand), new UIPropertyMetadata(null));
        #endregion
    }
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.