在过去的几个小时里,我一直在努力奋斗……
我有一个名为“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/