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
绑定到虚拟机上的属性即可