gpt4 book ai didi

c# - Caliburn Micro,动态加载的 View / View 模型

转载 作者:行者123 更新时间:2023-12-03 10:47:38 24 4
gpt4 key购买 nike

我一直在玩 Caliburn Micro 一段时间。

我正在处理的应用程序由 MainAppView、MainAppMenuView 和 MainAppContentView 组成。使用相应的 ViewModel。
这一切都很好。

现在在 MainAppContentView 中,我想动态显示几个看起来像 Windows 8 Startscreen Tiles 的 UserControl。
这意味着用户应该能够从 ListBox 中选择应用程序将显示的 UserControl。

所以我为此创建了几个 View 和 View 模型。现在有一组不同的瓷砖可供用户选择。

当时的想法是有一个 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>

想法,链接到 sample 或任何东西......将不胜感激。

Link to my test code

最佳答案

我目前不在可以测试它的地方,但我会通过继承基础 TileViewModel 来解决它(或 Tile )在我所有的 ViewModels 中(尽管您可能还会定义一个 ITile 接口(interface))。这可能包含 Tile位置信息、显示尺寸等常见Tile行为。

在托管您的磁贴的主控件上,您可以维护 Tile 的集合对象,每次你想添加一个新的Tile并显示它,您可以添加新的 ViewModel Tiles 集合的实例并调用Caliburn.Micro Activate新实例上的方法。在我的脑海中,我认为您需要更改您的 DataTemplate所以cal:View.Model属性直接绑定(bind)到对象,而不是属性,所以类似于 cal:View.Model="{Binding}"Caliburn.Micro应该照顾ViewModel/View每个图 block 的分辨率,使用内置的约定。您必须进行主机控制 Conductor<IScreen>.Collection.AllActive 允许所有 Tiles立即活跃起来。

在这种特殊情况下可能感兴趣的另一个属性是 cal:View.Context属性,这将允许您拥有多个 Views在同一个ViewModel .所以你的每一个Tiles可以支持不同的Views提供不同的信息(或功能)。 documentation 中简要提及,并且我在解释约定方面很擅长:One ViewModel, multiple views .

当我有机会时,我会尝试测试我的上述建议,看看它是否可行。

关于c# - Caliburn Micro,动态加载的 View / View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20328517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com