Xamarin.forms 如何将DataGrid列绑定到选定项的内部列表

Xamarin.forms 如何将DataGrid列绑定到选定项的内部列表,xamarin.forms,Xamarin.forms,我的视图模型中有我的列表: public ObservableCollection<Order> Orders { get; set; } private Order _selectedOrder; public Order SelectedOrder { get => _selectedOrder; set => SetValue(ref _selectedOrder, value); } public class Order { public i

我的视图模型中有我的列表:

public ObservableCollection<Order> Orders { get; set; }
private Order _selectedOrder;
public Order SelectedOrder
{
   get => _selectedOrder;
   set => SetValue(ref _selectedOrder, value);
}
public class Order
{
   public int OrderId { get; set; }
   public List<Item> OrderItems { get; set; }
}
public class Item
{
   public int ItemId{ get; set; }
   public string Name{ get; set; }
}
<dataGrid:DataGrid ItemsSource="{Binding Orders}"
                         SelectionEnabled="True"
                         SelectedItem="{Binding SelectedOrder}"
               RowHeight="70"
                         HeaderHeight="50" BorderColor="#CCCCCC" HeaderBackground="#E0E6F8"
               PullToRefreshCommand="{Binding RefreshCommand}"
                         IsRefreshing="{Binding IsRefreshing}">
    <dataGrid:DataGrid.Columns>
                     <dataGrid:DataGridColumn Title="Id" PropertyName="OrderItems.ItemId"/>
                     <dataGrid:DataGridColumn Title="Name" PropertyName="OrderItems.Name"/>
  </dataGrid:DataGrid.Columns>
课程顺序包含如下所示的项目列表:

public ObservableCollection<Order> Orders { get; set; }
private Order _selectedOrder;
public Order SelectedOrder
{
   get => _selectedOrder;
   set => SetValue(ref _selectedOrder, value);
}
public class Order
{
   public int OrderId { get; set; }
   public List<Item> OrderItems { get; set; }
}
public class Item
{
   public int ItemId{ get; set; }
   public string Name{ get; set; }
}
<dataGrid:DataGrid ItemsSource="{Binding Orders}"
                         SelectionEnabled="True"
                         SelectedItem="{Binding SelectedOrder}"
               RowHeight="70"
                         HeaderHeight="50" BorderColor="#CCCCCC" HeaderBackground="#E0E6F8"
               PullToRefreshCommand="{Binding RefreshCommand}"
                         IsRefreshing="{Binding IsRefreshing}">
    <dataGrid:DataGrid.Columns>
                     <dataGrid:DataGridColumn Title="Id" PropertyName="OrderItems.ItemId"/>
                     <dataGrid:DataGridColumn Title="Name" PropertyName="OrderItems.Name"/>
  </dataGrid:DataGrid.Columns>
我想将我的网格绑定到
订单
,并基于
所选订单
我想知道如何访问
项目
的属性。那么
Order>OrderItems(ItemId和Name)
如何在
grid
配置中指定它呢

这是我现在拥有的,但不起作用(网格显示为空):

public ObservableCollection<Order> Orders { get; set; }
private Order _selectedOrder;
public Order SelectedOrder
{
   get => _selectedOrder;
   set => SetValue(ref _selectedOrder, value);
}
public class Order
{
   public int OrderId { get; set; }
   public List<Item> OrderItems { get; set; }
}
public class Item
{
   public int ItemId{ get; set; }
   public string Name{ get; set; }
}
<dataGrid:DataGrid ItemsSource="{Binding Orders}"
                         SelectionEnabled="True"
                         SelectedItem="{Binding SelectedOrder}"
               RowHeight="70"
                         HeaderHeight="50" BorderColor="#CCCCCC" HeaderBackground="#E0E6F8"
               PullToRefreshCommand="{Binding RefreshCommand}"
                         IsRefreshing="{Binding IsRefreshing}">
    <dataGrid:DataGrid.Columns>
                     <dataGrid:DataGridColumn Title="Id" PropertyName="OrderItems.ItemId"/>
                     <dataGrid:DataGridColumn Title="Name" PropertyName="OrderItems.Name"/>
  </dataGrid:DataGrid.Columns>

如果您希望每一行都是一个
订单项,那么您的绑定应该是

ItemsSource="{Binding SelectedOrder.OrderItems}"



每行是一个订单。您希望如何在一列中显示多个OrderItems?@每个订单都包含列表,因此在网格中显示为行。我希望将每个OrderItem和列显示为itemId和Name。假设所选项目是订单X,订单X包含(列表),例如2。因此,在第2行末尾,如果希望每一行都是一个OrderItem,那么ItemsSource应该绑定到OrderItems,而不是OrderItemsOrders@Jason嗯,但是OrderItems是Orders的属性。如果我将ItemSource指向ItemsSource=“{Binding OrderItems}”,那么它将“不知道”它在从Orders中选择的Orders中。我还尝试这样做:您需要绑定到一个特定订单的OrderItems属性。如果您的VM中有一个属性
SelectedOrder
,那么
ItemsSource=“{Binding SelectedOrder.OrderItems}“
如果可能,我还有其他问题-当我向SelectedOrder.OrderItems集合中添加新项目时,表示:SelectedOrder.OrderItems.add(new OrderBattle.item(55,“aaa”);然后我做了:OnPropertyChanged($“SelectedOrder”);我的网格没有更新。你有什么想法吗?使用ObservableCollection,而不是OrderItems的列表?是的………只需将
SelectedItem
绑定到虚拟机上的属性即可