我在C#中有一个列表列表,其中每个列表包含3个整数
List<List<int>> Data = new List<List<int>>();
data.Add(new List<int>{ 1, 2, 3});
现在在WPF中,我有一个要将这些值绑定到的列表框。下面的代码是我现在拥有的代码,但是正如预期的那样,它表示没有“ Item”属性。
<ListBox ItemsSource="{Binding Data}" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding Item1}" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Item2}" />
<TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding Item3}" />
</Grid>
</DataTemplate>
</ListBox>
有人可以解释一下我要做什么才能使这些数字显示在列表框中?
谢谢。
答案 0 :(得分:3)
您需要在ListView
项模板中为绑定编制索引,如下所示:
<ListBox ItemsSource="{Binding Data}" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding [0]}" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding [1]}" />
<TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding [2]}" />
</Grid>
</DataTemplate>
</ListBox>
但是,如果您计划在每个List<int>
中具有动态数量的元素,则可以在原始ListView
中放置另一个ListView
。
此外,如果您遇到绑定路径问题,此链接:https://web.archive.org/web/20120814100526/http://msdn.microsoft.com/en-us/library/ms742451.aspx真的很方便!
答案 1 :(得分:1)
您需要像这样执行TextBlock
行:
<TextBlock Grid.Row="0"
Grid.Column="0"
Text="{Binding Path=[0]}" />
<TextBlock Grid.Row="0"
Grid.Column="1"
Text="{Binding Path=[1]}" />
<TextBlock Grid.Row="0"
Grid.Column="2"
Text="{Binding Path=[2]}" />
答案 2 :(得分:1)
如果您的内部列表始终包含3个项目,我建议您为绑定创建模型。像-
public class TripleIntObject
{
public int First { get; set; }
public int Second{ get; set; }
public int Third{ get; set; }
}
,但希望您的属性具有更多含义。
因此您的列表从List<List<int>>
变为List<TripleIntObject>
然后相应地修改您的TextBlocks-
<TextBlock Grid.Row="0"
Grid.Column="0"
Text="{Binding First}" />
<TextBlock Grid.Row="0"
Grid.Column="1"
Text="{Binding Second}" />
<TextBlock Grid.Row="0"
Grid.Column="2"
Text="{Binding Third}" />
如果您计划使用动态项目,我还建议从List<TripleIntObject>
更改为“ ObservableCollection”,以便在任何数据更改时通知您的视图。您可以阅读更多here。