2016-11-30 65 views
0

如何在父对象网格内绑定子对象网格的属性?我要的产品在网格中显示产品的成分,但我得到这个错误:UWP将子对象绑定到父对象网格内

BindingExpression path error: 'Product' property not found on 'Orders.Product'. BindingExpression: Path='Product.ComponentDescription' DataItem='Orders.Product'; target element is 'Windows.UI.Xaml.Controls.TextBox' (Name='null'); target property is 'Text' (type 'String')How do I display a list of components for each product by nesting a Components grid within a Products grid? 

模型和视图模型看起来像这样

namespace Orders 
{ 
    public class Order 
    { 
     public List<Product> Products { get; set; } 
    } 
    public class Product 
    { 
     public string ProductCode { get; set; } 
     public string ProductDescription { get; set; } 
     public List<Component> Components { get; set; } 
     public override string ToString() 
     { 
      return this.ProductCode; 
     } 
    } 
    public class Component 
    { 
     public string ComponentCode { get; set; } 
     public string ComponentDescription { get; set; } 
     public override string ToString() 
     { 
      return this.ComponentCode; 
     } 
    } 
    public class OrderPageViewModel 
    { 
     public ObservableCollection<Product> Products { get; set; } = new ObservableCollection<Product>(); 
     public OrderPageViewModel() 
     { 
      List<Component> componentList = new List<Component>() 
      { 
       new Component { ComponentCode="C1", ComponentDescription="Component One"}, 
       new Component { ComponentCode="C2", ComponentDescription="Component Two"}, 
       new Component { ComponentCode="C3", ComponentDescription="Component Three"} 
      }; 

      Products = new ObservableCollection<Product>() 
      { 
       new Product {ProductCode="P1", ProductDescription="Product One", Components=componentList }, 
       new Product {ProductCode="P2", ProductDescription="Product Two", Components=componentList }, 
       new Product {ProductCode="P3", ProductDescription="Product Three", Components=componentList } 
      }; 
     } 
    } 
} 

编辑1: XAML中看起来像这样

<Page 
    x:Class="Orders.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:Orders" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d"> 
    <Page.DataContext> 
     <local:OrderPageViewModel x:Name="OrderPageViewModel" /> 
    </Page.DataContext> 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <ListView 
      Name="ProductsList" 
      ItemsSource="{Binding Products}"> 
      <ListView.ItemTemplate> 
       <DataTemplate x:DataType="local:Product"> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="auto"/> 
          <RowDefinition Height="*"/> 
         </Grid.RowDefinitions> 
         <StackPanel Orientation="Horizontal"> 
          <TextBox Text="{Binding ProductCode}"></TextBox> 
          <TextBox Text="{Binding ProductDescription}"></TextBox> 
         </StackPanel> 
         <Grid> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="auto"/> 
           <RowDefinition Height="*"/> 
          </Grid.RowDefinitions> 
          <ListView 
           Name="ComponentsList" 
           ItemsSource="{Binding Products.Components}"> 
           <ListView.ItemTemplate> 
            <DataTemplate x:DataType="local:Component"> 
             <StackPanel> 
              <TextBox Text="{Binding Product.ComponentCode}"></TextBox> 
              <TextBox Text="{Binding Product.ComponentDescription}"></TextBox> 
             </StackPanel> 
            </DataTemplate> 
           </ListView.ItemTemplate> 
          </ListView> 
         </Grid> 
        </Grid> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
    </Grid> 
</Page> 

如果我删除组件的网格,产品将正确显示。我如何正确绑定组件的属性?

+0

你应该尝试的代码片段'{绑定组件[0] .ComponentCode}' – Archana

+0

谢谢@Archana的建议,但会发生什么'组件[1] ...组件[N-1]'? – Vague

+1

如果您需要查看所有必须使用的项目ListView – Archana

回答

1

要显示列表,您需要使用ListView或任何其他ItemsControl。下面是同一

      <ListView 
           Name="ComponentsList" 
           ItemsSource="{Binding Components}"> 
           <ListView.ItemTemplate> 
            <DataTemplate x:DataType="local:Component"> 
             <StackPanel> 
              <TextBox Text="{Binding ComponentCode}"></TextBox> 
              <TextBox Text="{Binding ComponentDescription}"></TextBox> 
             </StackPanel> 
            </DataTemplate> 
           </ListView.ItemTemplate> 
          </ListView>