【问题标题】:Binding ListBox to a collection of screens (widgets)将 ListBox 绑定到屏幕集合(小部件)
【发布时间】:2011-07-10 21:01:00
【问题描述】:

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

public class MyWidgetViewModel : Screen {}

我可以在另一个视图中轻松使用和显示它。 “托管”小部件的视图模型如下所示:

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 应该一个接一个地显示它们。我在让它工作时遇到了一些问题。

视图模型应该如下所示:

private List<Screen> widgets;

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

这部分代码没问题,因为我已将小部件绑定到组合框,并且组合框正确显示了控件列表。但是我在视图上“托管”小部件时遇到了问题。这是我尝试在 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>

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

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

【问题讨论】:

    标签: silverlight xaml data-binding mvvm caliburn.micro


    【解决方案1】:

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

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

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

    【讨论】:

    • 太好了,谢谢您的帮助!我通过删除 ItemTemplate 定义解决了这个问题,我将考虑改用 Conductor。
    猜你喜欢
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多