gpt4 book ai didi

silverlight - 将 ListBox 绑定(bind)到屏幕集合(小部件)

转载 作者:行者123 更新时间:2023-12-03 10:40:27 25 4
gpt4 key购买 nike

鉴于我有以下小部件(以及附加的 View ):

public class MyWidgetViewModel : Screen {}

我可以在另一个 View 中轻松使用和显示它。 “托管”小部件的 View 模型如下所示:
public class WidgetWorkspaceViewModel : Screen
{
private Screen myWidget = new MyWidgetViewModel();

public Screen MyWidget
{
get { return myWidget; }
set { myWidget = value; }
}
}

控件显示在 WidgetWorkspaceView 上,如下所示:
<ContentControl x:Name="OneWidget"/>

这一切都很好。但现在我想更改它,以便 WidgetWorkspaceViewModel 包含一组 Widget,并且 WidgetWorkspaceView 应该一个接一个地显示它们。我在让它工作时遇到了一些问题。

View 模型应该如下所示:
private List<Screen> widgets;

public List<Screen> Widgets
{
get { return widgets; }
set { widgets = value; NotifyOfPropertyChange(() => Widgets); }
}

这部分代码没问题,因为我已将小部件绑定(bind)到组合框,并且组合框正确显示了控件列表。但是我在 View 上“托管”小部件时遇到了问题。这是我尝试在 WidgetWorkspaceView 中使用但没有成功的 XAML:
<ListBox x:Name="Widgets">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>

<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl Width="100" Height="100" DataContext="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

根据断点,数据绑定(bind)部分工作正常,但我没有绘制小部件。

任何想法如何解决这个问题?我正在使用 Caliburn.Micro 来帮助绑定(bind)。

最佳答案

我认为问题在于 Caliburn.Micro 将自动为 ItemsControl 定义 ItemTemplate,您将覆盖它,因此您需要从 ListBox 中删除它,或者如果您想定义它,则使用 View附加属性来设置模型。

<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl Width="100" Height="100" cal:View.Model="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>

请注意,您也可以使用 Conductor(例如 Conductor<IScreen>.Collection.OneActiveConductor<IScreen>.Collection.AllActive)作为 WidgetWorkspaceViewModel 类型,而不是维护自己的 Screen 列表。这些导体有一个 Items 集合,并支持屏幕生命周期。

关于silverlight - 将 ListBox 绑定(bind)到屏幕集合(小部件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5228873/

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