@ette

C# WPF MVVM как получить ссылку на объект, выполнивший команду по привязке?

Изучаю WPF, недавно познакомился с шаблоном MVVM и при изучении возник вопрос.
Допустим, в разметке имеется контрол, есть кнопка с байндингом команды. Есть некая задача, которую нужно решить - переключение между вкладками TabControl по нажатии на кнопку, изменение других контролов, находящихся внутри TabItem.
Например, есть разметка:
<Window...>
<DockPanel>
<TabControl x:Name="tabControl" ItemsSource="{Binding Tabs}"/>
</DockPanel>
</Window>


App.xaml:
<!--Для каждого экземпляра класса SuperTabOne:SuperTab -->
  <DataTemplate DataType="{x:Type local:SuperTabOne}">
                <StackPanel>
                    <Button Content="Перейти на вторую вкладку" Command="{Binding SelectTab}"></Button>
                </StackPanel> 
        </DataTemplate>


MainWindowViewModel:
//коллекция классов, представляющих вкладки для TabControl аля SuperTabOne, SuperTabTwo, SuperTabEnd и др.
public ObservableCollection<SuperTab> Tabs
        {
            get { return _tabs ?? (_tabs = new ObservableCollection<SuperTab>()); }
        }
        private ObservableCollection<SuperTab> _tabs;

       RelayCommand _selectTabCommand;
        public ICommand SelectTab
        {
            get
            {
               if (_selectTabCommand == null)
                 _selectTabCommand = new RelayCommand(ExecuteSelectTabCommand, CanExecuteSelectTabCommand);
               return _selectTabCommand;
            }
        }


        public void ExecuteSelectTabCommand(object parameter)
        {
          //выбрать следующую вкладку
        }

        public bool CanExecuteSelectTabCommand(object parameter)
        {
           //логика...
            return true;
        }


Как в методе выполнения команды (ExecuteCommand) обратится к контролу, чтобы произвести над ним какие-либо действия? Или, к примеру, как обратиться к элементу, вызвавшему событие (выполнившему команду по привязке) и нужно ли это делать? Пока для меня это неочевидно(

Сейчас разные вкладки TabItem я создаю выполнением некой команды AddTab, хотелось бы реализовать и другие действия при выполнении соответствующей команды (в ExecuteCommand):

1. Переход от одной вкладки к другой. Хотелось бы понять, как узнать, какая вкладка выбрана и как выбрать другую.

2. Изменение других контролов, не принадлежащих TabControl. Если точнее, при выборе вкладки должны, например, появляться TextBox'ы на правой панели или, например, кнопки в нижней панели - статусбаре. При переходе от вкладки к вкладке будут меняться и TextBox'ы - для каждой вкладки - свои.

3. Закрытие вкладки. В общем-то, есть соображения как это делается, но хотелось бы получить рекомендации и по данному пункту .

Как это реализуется в MVVM? Пожалуйста распишите ЛОГИКУ решения данных задач в рамках MVVM WPF. Если можно, приведите какой-нибудь код в качестве примера, поделитесь ссылкой на проект с наглядным решением подобных задач, если таковые вам известны. Заранее благодарю.
  • Вопрос задан
  • 1138 просмотров
Решения вопроса 1
@tex0
Как в методе выполнения команды (ExecuteCommand) обратится к контролу, чтобы произвести над ним какие-либо действия?

2. Изменение других контролов, не принадлежащих TabControl.

Все взаимодействия через модель приложения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы