Caliburn micro和tabcontrol

时间:2012-11-03 23:56:40

标签: wpf mvvm caliburn.micro

我查看了大部分资源但我能找到一个好的解决方案。我有一个标签控件HARD编码。

<TabControl TabStripPlacement="Left" Padding="0" Style="{DynamicResource SettingsTab}" ItemContainerStyle="{DynamicResource SettingsTabItemStyle}" Background="WhiteSmoke" >
                <TabItem Header="ΓΕΝΙΚΑ" Margin="0" IsEnabled="False" > <Grid /></TabItem>                              
                <TabItem Header="Προσωπικό" Margin="0" IsSelected="True">
                    <Grid MinHeight="400">                     

                        <ContentControl HorizontalAlignment="Stretch" Margin="50,67,50,0"  Name="ActiveItem" />
                    </Grid>
                </TabItem>
                <TabItem Header="Τραπέζια" Margin="0">
                    <Grid />
                </TabItem>

更新 - 重述问题
这是我的自定义选项卡控件。灰色文本是一个禁用的选项卡项,它就像一个组。与常规设置,系统设置等一样。因此它具有导航菜单的作用。我可以在每个tabitem(不是禁用的)上有一个内容控件,并绑定我想要的视图模型 但我不能使用Conductor.Collection.OneActive和CM 为什么呢?
我已经看过来自CM样本和其他样本的helloscreens示例,但这里的问题是,如果我通过绑定这样做,那么除了创建一个没有用处的虚拟视图模型之外,没有办法显示禁用的tabitems。所以我怎样才能实现这个 ?

ad

1 个答案:

答案 0 :(得分:4)

更新:来源here

  

我有一个标签控件HARD编码。

这是一项要求吗?

  

但是我不能在CM上使用Conductor.Collection.OneActive。为什么呢?

我认为这不起作用的原因是使用Conductor.Collection.OneActive您需要将ItemsSource绑定到Items集合。如果您要绑定ItemsSource,则无法在XAML中描述标签项。

我创建了一个不涉及描述xaml中标签项的解决方案。

关键部分:

ShellView中,TabControl ItemContainerStyle被描述为标签项IsEnabled属性可以绑定到视图模型。

 <TabControl x:Name="Items"
                    Grid.Row="1"
                    TabStripPlacement="Left">
            <TabControl.ItemContainerStyle>
                <Style TargetType="{x:Type TabItem}">
                    <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
                </Style>
            </TabControl.ItemContainerStyle>
        </TabControl>

ShellViewModel类似,但我们现在正在激活第二个视图模型,因为第一个模型未启用。

public class HeaderViewModel : BaseTabViewModel
    {
        public HeaderViewModel(string name)
        {
            DisplayName = name;
            IsEnabled = false;
        }
    }

  public ShellViewModel(Tab2ViewModel tab2ViewModel,
                              Tab3ViewModel tab3ViewModel
            )
        {
             Items.Add (new HeaderViewModel ("ΓΕΝΙΚΑ"));
            Items.Add(tab2ViewModel);
            Items.Add(tab3ViewModel);

            ActivateItem (tab2ViewModel);
        }

启用或禁用视图模型构造函数中的选项卡项。

 public Tab2ViewModel()
        {
            DisplayName = "Προσωπικό";
            IsEnabled = true;
        }

未样式化的结果是第一个标签项被禁用,接下来的两个标签项被启用。

enter image description here