【问题标题】:Caliburn micro and tabcontrolCaliburn micro 和 tabcontrol
【发布时间】:2012-10-24 06:16:43
【问题描述】:

我查看了大多数资源,但我能找到一个好的解决方案。我有一个标签控件硬编码。

<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。那么我该如何实现这 ?

【问题讨论】:

标签: wpf mvvm caliburn.micro


【解决方案1】:

更新:来源here

我有一个硬编码的选项卡控件。

这是要求吗?

但我不能将 Conductor.Collection.OneActive 与 CM 一起使用。为什么?

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

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

关键部分:

ShellViewTabControlItemContainerStyle被描述为标签项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;
        }

未设置样式的结果是第一个选项卡项被禁用,接下来的两个被启用。

【讨论】:

  • 谢谢 Model.View 和 Bind.Model 在我看来是一样的。但问题是通过使用 Bind.Model 然后 Parent 是 nullo 。有解决办法吗?
  • 好的,这很简单,但我目前有一些禁用的虚拟标签项。我的意思是,如果我想要一个分组菜单,这似乎是不可能的
  • 我不知道如何根据需要填充我的选项卡控件。我看到了您的示例,但这无济于事,因为如果您看到我的图像,它有一些已启用=false(组)的项目
  • 那么您希望根据什么启用/禁用某些选项卡项?
  • 什么都没有。我只想要一个像 i.imgur.com/OdDb7.png 这样的菜单。我不知道如何使用导体。问题是我想要这些带有小写字母的东西。唯一的解决方案是在每个 tabitem 上都有一个绑定到 viewModel 类的内容控件。如果我在 bitbucket 遵循您的解决方案,那么我只会得到带有白色大字母的项目(因为这些仅绑定到视图模型)
猜你喜欢
  • 2012-01-29
  • 1970-01-01
  • 2012-10-12
  • 2014-06-29
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多