在过去的几个小时里,我一直在努力奋斗……

我有一个名为“DayItem”的用户控件,我想在另一个名为“DayPanel”的UserControl中显示48次。
我要说的是,这是以MVVM风格完成的,但是我只是在体验,一种直接的方法可以很好地回答。

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

如果我做

this.ItemsSource = DayItems;

一切都很好。
但是,我想能够像列表一样在UI中使用那些DayItems ...以支持多选等。

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

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

编辑:

我说了这句话,说了什么数据类型不是必需的,甚至是不可能的。
在后面的代码中,我告诉列表框,它的ItemSource是ObservableCollection。

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

谢谢你的帮助

最佳答案

首先,您需要为DayItem用户控件提供一个 View 模型。让我们称之为DayItemViewModel。另外,我想您还可以使用DayPanel的 View 模型,例如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>

关于c# - Silverlight,如何制作UserControl列表(在ContentControl中?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4724151/

10-11 18:29