none
Command для Контролов RRS feed

  • Вопрос

  • Добрый вечер.

    Подскажите пожалуйста, как происходит выполнение не команд в паттерне MVVM, а например MouseEnter, Drop, SelectedChange в ListView Unloaded в UserControl и т.п.? ВРоде как это тоже команды, но через Триггеры? Этот так сложно должно быть Первый вариант?

    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
      <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
          <i:InvokeCommandAction Command="{Binding Select}"
                                 />
        </i:EventTrigger>
      </i:Interaction.Triggers>


    а во ViewModel потом как найти индекс выбранный например

    или так должно быть Второй вариант?

    <ListBox SelectedItem="{Binding SelectedItem}" ...>
        ....
    </ListBox>

    public YourItem SelectedItem
    {
        get { return _selectedItem; }
        set
        {
            if(value == _selectedItem)
                return;
    
            _selectedItem = value;
    
            NotifyOfPropertyChange("SelectedItem");
    
            // selection changed - do something special
        }
    }

    То же про Unloaded у UserControl - а сделал так:

        xmlns:ViewModel.Event="Unloaded" 
        xmlns:ViewModel.Command="{Binding Unload}"


            public LiftViewModel()
            {
                Events = new[]
                {
                    "Unloaded"
                //  "PreviewMouseDown",
                //  "PreviewMouseUp",
                //  "PreviewMouseLeftButtonDown",
                //  "PreviewMouseLeftButtonUp",
                //  "PreviewMouseRightButtonDown",
                //  "PreviewMouseRightButtonUp",
                //  "MouseEnter",
                //  "MouseLeave"
                };           
    
                Unload = new SimpleCommand(Unloaded);

    Но команда Unloaded не запускается почему то.

    Может в SimpleCommand надо искать.

    Вообще как запускать Command вместо Click разобрался. Только кода вроде как получается даже больше чем без паттерна. А как запускать другие действия и отслеживать события.

    И ещё вопрос, но его задам дополнительно про InotifyProperty и DependencyObject

    Спасибо

    21 марта 2016 г. 20:32

Ответы

  • Добрый день.

    События, это как правило взаимодействие с пользователем, пробрасывать их в бизнес-логику, как правило не нужно. Если в вашем случае нужно, то скорее всего надо подумать над архитектурой системы.
    Ну и я вам вроде где-то уже писал, сделайте потомок стандартного контрола, объявите у него DependencyProperty типа ICommand для Binding-f команд которые вы хотите вызывать при наступлении определенных событий, и используйте его везде биндя команды к свойствам этого контрола.

    • Помечено в качестве ответа DevingAs 22 марта 2016 г. 14:46
    22 марта 2016 г. 10:52
    Отвечающий