在Silverlight中使用ViewModel和TabControl中的UI相关类型

时间:2011-10-14 09:11:36

标签: silverlight mvvm tabcontrol

在我的Silverlight应用程序中,我有一个包含选项卡控件和此视图的视图模型的视图。 更改选定的选项卡后,我需要刷新其数据。为了在视图模型中执行此操作,我在视图中使用由EventTrigger触发的命令,并将相应的事件args传递给它(如此处所述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();
    }
     .....
 }

所以,我的问题是:   我在视图模型中使用与UI相关的类型(TabItem,SelectionChangedEventArgs)并且是否有更好的方法来执行我上面描述的操作?

1 个答案:

答案 0 :(得分:1)

也许您可以将TabControl的SelectedIndex绑定到viewmodel中定义的属性,并将InvokeActionCommand附加到TabControl并订阅其SelectionChanged事件。

然后当调用该命令时,检查它是哪个索引然后相应地加载数据?