Использование связанных с пользовательским интерфейсом типов в ViewModel и TabControl в Silverlight - PullRequest
0 голосов
/ 14 октября 2011

В моем приложении Silverlight у меня есть представление, содержащее элемент управления вкладкой и модель представления этого представления.Когда выбранная вкладка изменяется, мне нужно обновить ее данные.Чтобы сделать это в модели представления, я использую команду, запускаемую EventTrigger в представлении, и передаю ей соответствующие аргументы событий (как описано здесь http://weblogs.asp.net/alexeyzakharov/archive/2010/03/24/silverlight-commands-hacks-passing-eventargs-as-commandparameter-to-delegatecommand-triggered-by-eventtrigger.aspx). Каждый элемент вкладки имеет свою собственную модель представления и, следовательно,Чтобы определить, какую модель представления я должен использовать для обновления данных, я наблюдаю заголовок в элементе вкладки, который я могу получить из аргументов события, например:

_tabSelectionChangedCommand = new DelegateCommand<SelectionChangedEventArgs>(TabSelectionChanged);
public ICommand TabSelectionChangedCommand
{
   get { return _tabSelectionChangedCommand; }
}

private void TabSelectionChanged(SelectionChangedEventArgs e)
{    
    var tabItem = (TabItem)e.e.AddedItems[0];
    if (tabItem.Header == "Header1" )
    {                    
         TabItem1ViewModel.Refresh();
    }
     .....
 }

Итак, мой вопрос: Хорошо, что я использую в модели представления типы, связанные с пользовательским интерфейсом (TabItem, SelectionChangedEventArgs), и есть ли лучшие способы сделать то, что я описал выше?

1 Ответ

1 голос
/ 14 октября 2011

Может быть, вы можете привязать SelectedIndex TabControl к свойству, определенному в вашей модели представления, и присоединить InvokeActionCommand к TabControl и подписать его на событие SelectionChanged.

Затем, когда команда вызывается, проверьте, по какому индексу она загружает данные соответственно?

...