2014-09-06 2 views
0

Я работаю над XAML для списка продуктов, каждый из которых содержит список атрибутов. У меня XAML работает, когда я помещаю статический текст, но когда я пытаюсь использовать свойства объектов, ничего не появляется.Вложенные ListView неправильно привязываются

Вот мой XAML:

<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; } 
} 

Изначально я просто пытался использовать словарь для атрибутов, но выяснилось, что не было никакой привязки XAML для словаря. Другая публикация предложила вместо этого использовать List>. Я знаю, что я привязываюсь к свойствам, потому что, когда я использую статический текст, появляется правильное количество атрибутов для созданного мной макетного объекта (2 KeyValuePairs для каждого продукта).

When I use static text:

When I try and use Binding

ответ

1

Может быть, это не то, что вы просите, но вы можете создать собственный класс для атрибутов, таких как:

public class Attribute 
{ 
    public string Name {get;set;} 
    public string Value {get;set;} 
} 

И тогда вы можете использовать List<Attribute> как свойство в Product класс вместо List<KeyValuePair<string, string>>.

Ваш 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> 
+0

Благодаря Даниэль, я пытался избежать создания моей собственной версии KeyValuePair, но я, вероятно, будет идти по этому пути, потому что я не могу показаться, чтобы получить внутренний версия работает. – Mike

+0

Я всегда делал это так, иначе это вызывает множество проблем, если вы хотите связать, например, словарь или список KeyValuePairs. –

Смежные вопросы