我一直在玩Caliburn Micro一段时间。
我正在处理的应用程序包含MainAppView,MainAppMenuView和MainAppContentView。使用相应的ViewModels。 这一切都很好。
现在在MainAppContentView中,我想要动态显示几个UserControl,它们看起来像Windows 8 Startscreen Tiles。 这意味着用户应该能够从ListBox中选择应用程序将显示的UserControl。
所以我为此创建了几个Views和ViewModel。现在有一组用户可以选择的不同图块。
我们的想法是有一个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>
想法,链接到样本或任何东西......将受到高度赞赏。
答案 0 :(得分:0)
我目前不在某个地方,我可以对此进行测试,但我会通过在我的所有TileViewModel
中继承基础Tile
(或ViewModels
)来接近它(尽管你是可能还定义了一个ITile界面)。这可能包含Tile
位置信息,显示大小和其他常见Tile
行为。
在托管您的磁贴的主控件上,您可以维护一组Tile
个对象,每次要添加新的Tile
并显示它时,您可以添加新的{{ 1}}实例到ViewModel
的集合,并在新实例上调用Tiles
Caliburn.Micro
方法。在我的头脑中,我认为您需要更改Activate
所以直接绑定到对象的DataTemplate
属性,而不是属性,所以类似于cal:View.Model
cal:View.Model="{Binding}"
应使用内置约定为每个切片处理Caliburn.Micro
/ ViewModel
分辨率。您必须使托管控件Conductor<IScreen>.Collection.AllActive
允许所有View
一次处于活动状态。
在这种特定情况下可能感兴趣的另一个属性是Tiles
属性,它允许您在同一cal:View.Context
上拥有多个Views
。因此,您的每个ViewModel
都可以支持不同的Tiles
来提供不同的信息(或功能)。在documentation中简要提到过,我在解释约定时遇到了麻烦:One ViewModel, multiple views。
当我有机会时,我会尝试测试我的上述建议,看看它是否可行。