我有一个传递给页面的IEnumerable,我想在我的页面上显示这个列表,我可以简单地将列表框的ItemsSource设置为它,并显示一个字符串列表
但是我想在每个项目旁边放一个复选框,以便用这些复选框选择字符串(就像你在android中的短信中添加联系人一样)。我可以在那里放两个列表框并将它们的滚动绑定到彼此,然后将其中一个的ItemsSource设置为IEnumerable,并将复选框添加到第二个listbox foreach项目。但这很尴尬!
现在,首先哪个控件更适合这个任务ItemsControl或ListBox(我知道ListBox是一个ItemsControl)? 然后我该如何为listbox / Itemscontrol的项目编写这样的模板?
我搜索了互联网,我发现的只是datatemplates的例子!但我没有任何数据要绑定!我将IEnumerable传递给一个Page,然后我将Listbox / ItemsControl的Itemssource设置为它。我希望ItemsControl / Listbox在每个项目旁边放置一个复选框。
答案 0 :(得分:1)
HierarchicalDataTemplate
可能是您的答案。
我写了一个UserControl,里面只有Menu
。为了模板化/设计将在运行时插入的MenuItens
,我使用了上面提到的HierarchicalDataTemplate
。
因此,在我的<UserControl.Resources>
标记内插入了以下代码。请注意,代码只是您实际可以做的迷你预览! (WPF非常可定制!)
代码:
<HierarchicalDataTemplate DataType="{x:Type ViewModel:CmpMenuViewModel}" ItemsSource="{Binding MenuSubItem}" >
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding Comando}" />
<Setter Property="CommandParameter" Value="{Binding Texto}"/>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Imagem}" />
<AccessText Text="{Binding Texto}" />
</StackPanel>
</HierarchicalDataTemplate>
<StackPanel...
位是我的实际模板
我的风格位于<HierarchicalDataTemplate.ItemContainerStyle>
内。不要忘记将<Style TargetType=>
更改为您的实际TargetType!
最好的问候,
蒂亚戈
答案 1 :(得分:0)
您需要将数据包装到另一个具有DataTemplate复选框的可绑定属性的类中。
例如:
<ItemsControl ItemsSource="{Binding YourList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding TextValue}"
IsChecked="{Binding IsChecked}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
IEnumerable中每个项目的ViewModel可能如下所示:
class Checkable : ViewModelBase {
private bool _isChecked;
private string _textValue;
public bool IsChecked {
get {
return _isChecked;
}
set {
_isChecked = value;
OnPropertyChanged("IsChecked");
}
}
public string TextValue {
get {
return _textValue;
}
set {
_textValue = value;
}
}
}
UserControl的ViewModel将具有IEnumerable,如:
public List<Checkable> YourList;
无论您使用ListBox还是ItemsControl都是您正在寻找的功能类型(我认为ItemsControl是您在这里寻找的)。