【发布时间】:2013-12-02 12:35:33
【问题描述】:
我一直在玩 Caliburn Micro 一段时间。
我正在处理的应用程序由 MainAppView、MainAppMenuView 和 MainAppContentView 组成。使用相应的 ViewModel。 这一切都很好。
现在,我想在 MainAppContentView 中动态显示几个看起来像 Windows 8 Startscreen Tiles 的 UserControl。 这意味着用户应该能够从 ListBox 中选择应用程序将显示的 UserControl。
所以我为此创建了几个视图和视图模型。现在有一系列不同的图块可供用户选择。
当时的想法是有一个 Tile 模型:
namespace CaliburnMicro.Test.Model
{
public class Tile
{
public int ID { get; set; }
public string View { get; set; }
public List<string> Views { get; set; }
public string TileSize { get; set; }
}
}
然后从 Tile.View 或 Tile.Views 属性中解析要显示的 View/ViewModel。
有人知道如何使用 Caliburn Micro 完成这项工作吗?
我试图通过制作这样的 DataTemplate 来解决它:
<DataTemplate>
<Grid Margin="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50*" />
<ColumnDefinition Width="50*" />
<ColumnDefinition Width="50*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding ID}" FontWeight="Bold" />
<TextBox Grid.Column="1" Text="{Binding ID }" />
<ContentControl Grid.Column="2" cal:View.Model="{Binding View}" />
</Grid>
</DataTemplate>
想法、示例链接或任何东西......将不胜感激。
【问题讨论】:
-
所有的 Tiles 是否会共享相同的行为(只是外观不同),还是需要为每个 Tiles 单独设置一个
ViewModel? -
嗨,所有的瓦片都将有一个视图和一个视图模型。但是一个特定的瓦片将显示什么视图和视图模型,应该在瓦片对象中定义。我的想法是瓷砖对象只是将瓷砖的属性定义为大小、颜色、视图或视图、isSelected ......等等。虽然 tile 的内容将是一个带有 viewModel 的视图,但它的表示/数据绝不会链接到 tile/tile 对象。
标签: c# wpf mvvm ioc-container caliburn.micro