我是新手,所以忍受我。
我有一个viewmodel和一个带有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中创建了一个新的属性,这个属性是一个字符串,然后用我的应用程序收集源数据的方式进行一些摇摆,我能够让它始终如一地工作。
如果这种方法有效,我仍然感兴趣,但在我看来,它的工作量会少很多。
答案 0 :(得分: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中,我们通常会尝试为每个视图创建一个视图模型类,该视图具有我们需要在其中显示的所有数据。
更新&gt;&gt;&gt;
忽略数据可能带有或不带有的数字...只需添加int Number
属性,并在用数据填充其他属性时将其设置为0。将数据传递给视图模型时,只需遍历它,对其进行正确编号即可。假设您的馆藏名为Items
,您可以这样做:
for (int index = 1; index < Items.Count; index++)
{
Items[index - 1].Number = index;
}