【问题标题】:Show a list in combobox item from list of lists从列表列表中的组合框项目中显示列表
【发布时间】:2018-09-18 08:14:45
【问题描述】:

我目前有一个List<List<Path>>,我想在组合框项目中显示内部列表。大致像这个伪:

<ComboBox>
    <ComboBoxItem Content="3 paths"/>
    <ComboBoxItem Content="3 paths"/>
    <ComboBoxItem Content="3 paths"/>
    <ComboBoxItem Content="3 paths"/>
</Combobox>

编辑:添加图片

这就是现在的样子

这大概就是我想要的样子

在图像中,每一行都是一个列表,其中包含另一个列表,其中包含三角形。

因此,如果最外面的列表中有 4 个列表项,每个列表项都有 3 个路径,我希望它们像上面那样显示。 我现在的设置是这样的

Xaml:

<ComboBox ItemsSource="{Binding Path=AvailableCombinationsOfShape}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Path Data="{Binding Path=Data}" StrokeThickness="1" Stroke="Black"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

后面的代码:

AvailableCombinationsOfShape = new List<List<Path>>();

foreach (var combination in combinations)
{
    var r = CombineShapes(GetImageShapes(), combination);
    AvailableCombinationsOfShape.Add(r);
    i++;
}      
private List<Path> CombineShapes(List<SymbolShapeModel> shapes, int[] numbersNotToFill)
{
    var pathList = new List<Path>();
    foreach (var shape in shapes)
    {
        var p = new Path();
        p.Data = shape.Shape;
        pathList.Add(p);
    }
    return pathList;
}

这样,我将每个列表中的第一个形状显示在组合框中,但我希望显示所有 3 个形状。

我想要这样的原因是因为我想为每个组合框项目中的一些形状着色。 (想象 3 个方块。我希望第一个项目显示方块 1 和 2 的颜色,项目 2 应该显示方块 2 和 3 的颜色,最后一个项目应该显示方块 1 和 3 的颜色。)

希望有人可以帮助我! 谢谢!

【问题讨论】:

  • 你需要什么从大帖中不是很清楚。我猜你有一个分层列表(即列表或项目......其中每个项目可以有一个或多个项目)。您要显示的(如果我没记错的话)是一个 Combobox,其项目是所有 List Ietms 和内部项目的联合。让我知道这是否正确。
  • 您是要让用户选择单个事物还是一组事物?如果是后者,如何将数据模板更改为保存 ItemsControl,并将 ItemsSource 设置为内部列表?
  • @PrateekShrivastava 我已经更新了图片。希望这让它更清楚一点:)
  • @RobinBennett ItemsControl 可能会起作用。我将如何绑定到 itemscontrol 列表中的列表? :)
  • nvm @RobinBennett。谢谢!

标签: c# wpf combobox binding


【解决方案1】:

谢谢@RobinBennett。我只需要一个 Itemscontrol

<ComboBox ItemsSource="{Binding Path=AvailableCombinationsOfShape, Mode=OneWay}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Path Data="{Binding Path=Data}" StrokeThickness="1" Stroke="Black"/>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

三角形的位置有点奇怪,但这是我自己能够处理的问题。

【讨论】:

  • 请注意,您的视图模型中不应有任何 Path 对象。仅使用几何。 AvailableCombinationsOfShape 应该是List&lt;List&lt;Geometry&gt;&gt;,内部ItemTemplate 中的Path 应该像&lt;Path Data="{Binding}" ... /&gt; 一样绑定。
  • 如果要水平排列形状,请将 ItemControl 的 ItemsPanel 属性设置为水平 StackPanel。
  • @Clemens。是的,我想我应该做这样的事情,但在尝试了似乎永远的事情之后,我放弃了。我只是无法让它与几何形状和不同颜色的三角形一起工作:)
  • 如果还有填充或描边颜色,您应该有一个具有适当属性的 ShapeItem 类,例如一个几何图形和一个或两个画笔。然后 AvailableCombinationsOfShape 将是 List&lt;List&lt;ShapeItem&gt;&gt;,而路径将类似于 &lt;Path Data="{Binding Geometry}" File="{Binding FillBrush}" .../&gt;。像这样的东西:stackoverflow.com/a/40190793/1136211
  • @Clemens 确实有这样的课程。我正在尝试在我们发言时实施它。我会让你知道情况如何。感谢所有反馈!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2015-12-17
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 2017-02-14
  • 2012-01-19
相关资源
最近更新 更多