在过去的几个小时里,我一直在喋喋不休......
我有一个名为“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中的每个控件之间都存在间隙,这会影响布局 而且我还想找出一种通过拖动来选择多个项目的方法......
感谢帮助如此肥胖
答案 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)。