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

时间:2011-01-18 12:41:11

标签: c# silverlight data-binding mvvm user-controls

在过去的几个小时里,我一直在喋喋不休......

我有一个名为“DayItem”的用户控件,我想在另一个名为“DayPanel”的UserControl中显示48次。 让我提一下这是用MVVM风格完成的,但我只是经历过,直接的方式可以很好地回答。

我在ObservableCollection<DayItem>模型中有一个DayPanel,在Xaml中有一个<ItemsPresenter />

如果我这样做

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

所以我尝试使用ContentControl,并将其内容设置为ObservableCollection。 但它只显示ObservableCollection对象的ToString文本。 所以我想我需要一个DataTemplete ...... 但为什么我需要一个DataTemple来显示一个控件? 它已经在它自己的Xaml风格,我不想重复它的造型。

或者我可能完全错了,无论如何我需要帮助:x

修改

我让这个工作,说什么DataType不是必需的,甚至可能。 在我告诉列表框后面的代码中,它的ItemSource是ObservableCollection。

现在我遇到了其他问题... ListBox相关... ListBox中的每个控件之间都存在间隙,这会影响布局 而且我还想找出一种通过拖动来选择多个项目的方法......

感谢帮助如此肥胖

2 个答案:

答案 0 :(得分:2)

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

public class DayPanelViewModel
{
    public ObservableCollection<DayItemViewModel> 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>

答案 1 :(得分:0)

尝试使用ListBox,因为它实现了多选... 如果您不在DayPanelModel中包含DayItems,而是DayItemModel,则设置ListBox的ItemTemplate以使用DayItem呈现每个DayItemModel也可能是明智的(对于MVVM)。