0

我是新手,所以请耐心等待。

我有一个视图模型和一个带有 ItemsControl 的视图,其中已经有一些数据,并且有自己的项目源。

但是我实际上想对控件中的项目进行编号,因为它们总是有 10 个。我可以通过在左侧添加大量文本块来做到这一点,但这很乏味,我正试图找到一种不同的方式。

所以这是我到目前为止的要点:

<ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                                <ColumnDefinition />
                                <ColumnDefinition />
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0" Text="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl}, Path=DataContext.Nums}" />
                            <TextBlock Grid.Column="1" Text="{Binding Item1}" />
                            <TextBlock Grid.Column="2" Text="{Binding Item2}" />
                        </Grid>
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>

我的问题是当然它只是为每个项目显示相同的项目,在这种情况下是“(集合)”,因为我有一个包含 1-10 的列表属性。

在单独的 .cs 文件中对此进行绑定:

private List<int> _nums = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

public List<int> Nums
{
    get { return _nums; }
}

编辑:

因此,我找到了一个解决方案,方法是在 itemssource 中创建一个新属性,该属性是一个字符串,然后对我的应用程序收集源数据的方式进行一些调整,我能够使其始终如一地工作。

如果这种方法可行,我仍然很感兴趣,但是在我看来,它的工作量会少很多。

4

1 回答 1

0

到目前为止,我认为最容易做的事情就是简单地将一个int属性添加到您的数据类型或数据视图模型类中,然后Bind直接添加到您的ItemTemplate

<DataTemplate>
    <StackPanel Orientation="Horizontal">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Text="{Binding Number}" />
            <TextBlock Grid.Column="1" Text="{Binding Item1}" />
            <TextBlock Grid.Column="2" Text="{Binding Item2}" />
        </Grid>
    </StackPanel>
</DataTemplate>

在 WPF 中,我们通常尝试为每个视图创建一个视图模型类,其中包含我们需要在其中显示的所有数据。

更新>>>

忽略数据可能附带或不附带的数字......只需添加一个int Number属性并在使用数据填充其他属性时将其设置为 0。当您将数据传递给视图模型时,只需对其进行迭代,并对其进行正确编号。假设您的收藏名为Items,您可以这样做:

for (int index = 1; index < Items.Count; index++)
{
    Items[index - 1].Number = index;
}
于 2013-10-04T13:42:47.923 回答