【问题标题】:Bind a list of the same type viewModels to a tabcontrol in Caliburn.Micro将相同类型视图模型的列表绑定到 Caliburn.Micro 中的选项卡控件
【发布时间】:2012-09-19 19:38:29
【问题描述】:

我在将 ViewModel 列表作为项绑定到选项卡控件时遇到问题。

//ShellViewModel.cs
private BindableCollection<RecentUnitViewModel> RecentUnitModels { get; set; }
<!-- ShellView.xaml -->
<GroupBox FontSize="16" Margin="10" FontWeight="DemiBold" Grid.Row="3">
    <GroupBox.Header>Last Seen</GroupBox.Header>
    <TabControl ItemsSource="{Binding RecentUnitModels}" >
    </TabControl>
</GroupBox>

意外结果:显示类型“RecentUnitViewModel”而不是视图。

【问题讨论】:

  • 您遇到错误了吗?在运行时得到意想不到的结果?也许您可以编辑您的问题以包含有关您的项目的更多详细信息。
  • 如果你还没有,你应该阅读data binding overview
  • 我只是不知道如何使用 Caliburn 绑定到 ViewModel 列表。
  • 当你使用x:Name="RecentUnitModels"而不是ItemsSource时它是自动的

标签: wpf c#-4.0 mvvm wpf-controls caliburn.micro


【解决方案1】:

如果您有一个按约定绑定的Conductor,则 TabControl 的 Caliburn 绑定是最简单的(将 DataContext 设置为 Conductor 实例并将 TabControl 命名为“Items”。)这里的问题是 TabControl 实例化单个由所有选项卡共享的内容呈现器,但您需要以某种方式告诉 Caliburn.Micro 在更改内容时为 ViewModel 查找视图。我发现这很好用:

        <TabControl.ContentTemplate>
            <DataTemplate>
                <ContentControl cal:View.Model="{Binding}"/>
            </DataTemplate>
        </TabControl.ContentTemplate>

我在这里假设您绑定的 ViewModel 是真正的 ViewModel(不是 UserControl),并且您拥有 Caliburn.Micro 为您绑定的单独的 View (UserControl)。

【讨论】:

  • 那是我的问题——同时学习 Caliburn 和 WPF 对我来说似乎有点挑战。谢谢!
  • @Moyler,WPF 的学习曲线确实相当陡峭。如果您愿意使用它的默认约定,Caliburn 会更容易。如果您遵循约定,一切都会自动运行。只要确保继承您的项目的维护工程师接受过培训,即更改或删除“未使用”x:Name 可能会造成灾难性影响。
【解决方案2】:

您的财产需要公开...

【讨论】:

  • 我的错,我把它从一个字段改成了一个属性,忘记改修饰符了,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2011-02-19
  • 2013-03-25
  • 2013-04-05
相关资源
最近更新 更多