【问题标题】:Set DataContext to a view in a TabItem将 DataContext 设置为 TabItem 中的视图
【发布时间】:2018-01-03 21:05:39
【问题描述】:

我有一个处理名为“WorkSpace”的视图的 ViewModel。现在不涉及无用的细节,为了在此工作区中包含的 TabControl 内创建一个新选项卡,我使用视图模型引发了一个事件,该事件在视图后面的代码中实现:

MainViewModel.ShowTab += OpenTab;
MainViewModel.FocusTab += FocusTab;

private void OpenTab(object sender, TabEventArgs e)
{
    // TabEventArgs are custom EventArgs who contain also a property called ChildViewModel
    object x = WorkAreaTabCtrl.Resources[e.name];
    WorkAreaTabCtrl.Items.Add(x);
    // do something here  
    WorkAreaTabCtrl.SelectedItem = x;
}

private void FocusTab(object sender, TabEventArgs e)
{
    object x = WorkAreaTabCtrl.Resources[e.name];
    WorkAreaTabCtrl.SelectedItem = x;
}

在我的选项卡控件的资源中,我定义了不同类型的选项卡项,如下所示:

<mh:MetroTabItem CloseButtonEnabled="True" x:Key="{x:Static res:Resources.LBL_1}" Header="{x:Static res:Resources.LBL_1}">
    <mh:MetroTabItem.Content>
         <path2view:myView1 x:Name="view1"/>
    </mh:MetroTabItem.Content>
</mh:MetroTabItem>

我的问题如下。如何将 TabEventArgs 中包含的 ChildViewModel 分配为我在 OpenTab 方法中获得的 TabItem 的 DataContext?

【问题讨论】:

    标签: c# wpf datacontext tabitem


    【解决方案1】:

    您是否尝试将 x 强制转换为 TabItem 并在其上设置 DataContext?

    ((TabItem) x).DataContext = e.ChildViewModel;
    

    【讨论】:

    • 我一直在寻找更优雅的解决方案。因为这实际上是我唯一的计划
    • 你能解释一下为什么你不喜欢这个解决方案,以及更优雅的解决方案应该朝哪个方向发展(最好直接在上面的问题中?)
    • 我给了你接受的答案,主要是因为我看不到其他方法来做我需要的事情
    猜你喜欢
    • 2014-12-20
    • 2018-03-12
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多