C# 嵌套绑定&;具有UniformGrid的ListView中的布局
我是WPF/XAML新手,在数据绑定和布局方面有一些不错的问题。 我努力实现的目标: 包含一行网格单元(仅包含文本和背景色)和一些文本块下方的列表。我的XAML如下所示:C# 嵌套绑定&;具有UniformGrid的ListView中的布局,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我是WPF/XAML新手,在数据绑定和布局方面有一些不错的问题。 我努力实现的目标: 包含一行网格单元(仅包含文本和背景色)和一些文本块下方的列表。我的XAML如下所示: <Window.Resources> <DataTemplate x:Key="GridLayoutTemplate"> <Grid> <Grid.ColumnDefinitions> <
<Window.Resources>
<DataTemplate x:Key="GridLayoutTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Rectangle Grid.Row="0" Grid.Column="0" Fill="{Binding RowData.RowColor}" />
<TextBlock Text="{Binding RowData.RowText}" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="ListLayoutTemplate">
<StackPanel VerticalAlignment="Stretch">
<ItemsControl ItemTemplate="{StaticResource GridLayoutTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" Columns="9"></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<Grid Background="Green">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Rectangle Grid.Row="0" Grid.Column="0" Fill="{Binding TileColor}" />
<TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding TileText}" />
</Grid>
</StackPanel>
</DataTemplate>
</Window.Resources>
<ListView ItemTemplate="{StaticResource ListLayoutTemplate}" Name="lvDataBinding">
</ListView>
代码隐藏:
public Test()
{
InitializeComponent();
List<DataObject> items = new List<DataObject>();
List<Row> rowItem = new List<Row>();
rowItem.Add(new Row()
{
RowColor = "Red",
RowText = "Text1"
});
rowItem.Add(new Row()
{
RowColor = "Blue",
RowText = "Text2"
});
items.Add(new DataObject()
{
TileColor = "Black",
TileText = "Blibb",
RowData = rowItem
});
items.Add(new DataObject() { TileColor = "Yellow", TileText = "Blubb", RowData=rowItem });
items.Add(new DataObject() { TileColor = "Red", TileText = "Blabb", RowData=rowItem });
this.lvDataBinding.ItemsSource = items;
}
}
public class DataObject
{
public string TileText { get; set; }
public string TileColor { get; set; }
public List<Row> RowData { get; set; }
}
public class Row
{
public string RowText { get; set; }
public string RowColor { get; set; }
}
公共测试()
{
初始化组件();
列表项=新列表();
List rowItem=新列表();
添加(新行()
{
RowColor=“红色”,
RowText=“Text1”
});
添加(新行()
{
RowColor=“蓝色”,
RowText=“Text2”
});
items.Add(新数据对象()
{
TileColor=“黑色”,
TileText=“Blibb”,
RowData=rowItem
});
添加(newdataobject(){TileColor=“Yellow”,TileText=“Blubb”,RowData=rowItem});
添加(newdataobject(){TileColor=“Red”,TileText=“Blabb”,RowData=rowditem});
this.lvDataBinding.ItemsSource=项目;
}
}
公共类数据对象
{
公共字符串TileText{get;set;}
公共字符串TileColor{get;set;}
公共列表行数据{get;set;}
}
公共类行
{
公共字符串RowText{get;set;}
公共字符串RowColor{get;set;}
}
如果我运行此命令,它只显示listview的行,而不显示uniformgrid。
listview项的绑定是可以的,但是我不知道uniformgrid,布局也可能是错误的。一点也不清楚 将
ItemsControl
的ItemsSource
属性绑定到RowData
,并从GridLayoutTemplate中的绑定路径中删除“RowData.”
<DataTemplate x:Key="GridLayoutTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Rectangle Grid.Row="0" Grid.Column="0" Fill="{Binding RowColor}" />
<TextBlock Text="{Binding RowText}" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="ListLayoutTemplate">
<StackPanel VerticalAlignment="Stretch">
<ItemsControl ItemsSource="{Binding RowData}" ItemTemplate="{StaticResource GridLayoutTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" Columns="9"></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<Grid Background="Green">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Rectangle Grid.Row="0" Grid.Column="0" Fill="{Binding TileColor}" />
<TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding TileText}" />
</Grid>
</StackPanel>
</DataTemplate>