C# Silverlight,如何制作UserControl列表(在ContentControl中?)

C# Silverlight,如何制作UserControl列表(在ContentControl中?),c#,silverlight,data-binding,mvvm,user-controls,C#,Silverlight,Data Binding,Mvvm,User Controls,在过去的几个小时里,我一直在用我的头敲打这个 我有一个名为“DayItem”的用户控件,我想在另一个名为“DayPanel”的用户控件中显示它48次。 让我提一提,这是以MVVM方式完成的,但我只是在体验,一条直截了当的路可以很好地找到答案 我在DayPanel模型中有一个ObservableCollection,在Xaml中有一个 如果我这样做 this.ItemsSource = DayItems; 一切都很好。 但是,我希望能够像列表一样使用UI中的DayItems。。。支持多选等 因此

在过去的几个小时里,我一直在用我的头敲打这个

我有一个名为“
DayItem
”的用户控件,我想在另一个名为“
DayPanel
”的用户控件中显示它48次。 让我提一提,这是以MVVM方式完成的,但我只是在体验,一条直截了当的路可以很好地找到答案

我在
DayPanel
模型中有一个
ObservableCollection
,在Xaml中有一个

如果我这样做

this.ItemsSource = DayItems;
一切都很好。 但是,我希望能够像列表一样使用UI中的DayItems。。。支持多选等

因此,我尝试使用ContentControl,并将其内容设置为
observateCollection
。 但它只显示
可观测集合
对象的ToString文本。 所以我想我需要一个数据模板。。。 但是为什么我需要一个DataTemple来显示控件? 它已经用自己的Xaml设计了,我不想再重复它的设计了

或者我完全错了,反正我需要帮助:x

编辑:

我让它工作,说什么数据类型是不必要的,甚至是不可能的。 在后面的代码中,我告诉列表框,它的ItemSource是ObservableCollection

现在我遇到了其他问题。。。列表框相关。。。 列表框中的每个控件之间都有间隙,这会扰乱布局 我还需要找出一种方法,通过拖动来选择多个项目


感谢您的帮助,所以请尝试使用ListBox,因为它实现了multiselect。。。
另外,如果您不包含DayItems,而是在DayPanelModel中包含DayItemModel,并将列表框的ItemTemplate设置为在每个DayItemModel中显示一个DayItem,这可能是明智的(对于MVVM)。

首先,您需要DayItem用户控件的视图模型。我们称之为DayItemViewModel。另外,我假设DayPanel还有一个视图模型,名为DayPanelViewModel。然后,DayPanelViewModel将公开DayItemViewModel实例的集合:

public class DayPanelViewModel
{
    public ObservableCollection<DayItemViewModel> DayItems { get; set; }
}
公共类DayPanelViewModel
{
公共ObservableCollection DayItems{get;set;}
}
然后,在DayPanel.xaml中:

<UserControl x:Class="DayPanel"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <UserControl.Resources>
        <DataTemplate x:Key="DayItemTemplate"
                      DataType="{x:Type my:DayItemViewModel}">
            <my:DayItem />
        </DataTemplate>
    </UserControl.Resources>
    <Grid>
        <ListBox ItemsSource="{Binding DayItems}" 
                 ItemTemplate="{StaticResource DayItemTemplate}" />
    </Grid>
</UserControl>


ContentControl==保存1个元素。显然这不是正确的选择。您可以将ContentControl用作ItemPlate。为了简单起见,我现在不会在MVVM中执行此操作,因此我创建了一个listbox,将其绑定到oberservableList,并尝试创建DataTemplate,但出现了一个奇怪的错误:XML命名空间“”中的“DataTemplate”类型上不存在属性“DataType”。这真的很奇怪。检查您的XAML。我建议您从一开始就完全实现MVVM。让它在不使用DayaType属性的情况下工作,而DayaType属性并不存在,我猜这不是强制性的。无论如何,我已经更新了问题,如果你有更多的补充:)