C# 嵌套的ListView未正确绑定
我正在为一个产品列表开发XAML,每个产品都包含一个属性列表。当我输入静态文本时,我有XAML功能,但是当我尝试使用objects属性时,什么都没有显示 这是我的XAML:C# 嵌套的ListView未正确绑定,c#,xaml,data-binding,collections,C#,Xaml,Data Binding,Collections,我正在为一个产品列表开发XAML,每个产品都包含一个属性列表。当我输入静态文本时,我有XAML功能,但是当我尝试使用objects属性时,什么都没有显示 这是我的XAML: <ListView ItemsSource="{Binding Products}"> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem">
<ListView ItemsSource="{Binding Products}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition />
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" FontSize="32" Margin="5" />
<GridView Grid.Column="1" ItemsSource="{Binding Attributes}">
<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>
</GridView.ItemContainerStyle>
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Key}" Foreground="White" Height="Auto"/>
<TextBlock Text="{Binding Value}" Foreground="White" Height="Auto"/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
<Grid Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="Here is some selling point about product 1." FontSize="14" Margin="5" />
<StackPanel Grid.Row="1" Orientation="Horizontal">
<TextBlock Margin="5" FontSize="14" Text="1/4 oz: $150" />
<TextBlock Margin="5" FontSize="14" Text="1/2 oz: $250" />
<TextBlock Margin="5" FontSize="14" Text="1 oz: $450" />
</StackPanel>
</Grid>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
<Style TargetType="ListView">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>
</ListView>
这是我的对象定义:
public class Product
{
public string Name { get; set; }
public string SellingPoint { get; set; }
public List<KeyValuePair<string, string>> Attributes { get; set; }
public Scale Scale { get; set; }
public UnitOfMeasure UoM { get; set; }
}
公共类产品
{
公共字符串名称{get;set;}
公共字符串SellingPoint{get;set;}
公共列表属性{get;set;}
公共刻度{get;set;}
公共计量单位{get;set;}
}
我最初只是尝试对属性使用字典,但发现字典没有XAML绑定。另一篇帖子建议我使用列表>。我知道我很好地绑定到了属性,因为当我使用静态文本时,为我创建的模拟对象显示了正确数量的属性(每个产品有2个KeyValuePairs)
也许这不是您想要的,但您可以为属性创建自己的类,例如:
public class Attribute
{
public string Name {get;set;}
public string Value {get;set;}
}
然后,您可以将List
用作Product
类中的属性,而不是List
您的XAML将如下所示:
<GridView Grid.Column="1" ItemsSource="{Binding Attributes}">
<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="HorizontalAlignment" Value="Stretch"/>
</Style>
</GridView.ItemContainerStyle>
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" Foreground="White" Height="Auto"/>
<TextBlock Text="{Binding Value}" Foreground="White" Height="Auto"/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
谢谢Daniel,我曾试图避免创建自己版本的KeyValuePair,但我可能会走这条路,因为我似乎无法让内部版本正常工作。我一直都是这样做的,否则在您想要绑定(例如字典或KeyValuePair列表)时会导致很多问题。