0

我有一个传递给页面的 IEnumerable,我想在我的页面上显示这个列表,我可以简单地将列表框的 ItemsSource 设置为它,然后将显示一个字符串列表

但是我想在每个项目旁边放一个复选框,以使这些复选框可以选择字符串(就像您如何在 android 中将联系人添加到 SMS 一样)。我可以将两个列表框放在那里并将它们的滚动绑定到彼此,然后将其中一个的 ItemsSource 设置为 IEnumerable 并将复选框添加到每个项目的第二个列表框。但是很尴尬!

现在,首先哪个控件更适合这个任务 ItemsControl 或 ListBox(我知道 ListBox 是一个 ItemsControl)?然后如何为列表框/项目控件的项目编写这样的模板?

我搜索了互联网,我发现的只是数据模板的例子!但我没有任何数据要绑定!我将 IEnumerable 传递给 Page,然后将 Listbox/ItemsControl 的 Itemssource 设置为它。我希望 ItemsControl/Listbox 在每个项目旁边放置一个复选框。

4

2 回答 2

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!

最好的问候,
蒂亚戈

于 2013-10-02T17:24:37.203 回答
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 就是您在此处寻找的功能)。

于 2013-10-02T17:24:08.970 回答