Xamarin.forms 从绑定属性中读取选定项

Xamarin.forms 从绑定属性中读取选定项,xamarin.forms,Xamarin.forms,我已将网格绑定到viewmodel的选择的Order.OrderItems。我知道选择了哪个订单,但一旦用户单击网格的行(如此具体的项目),如何知道视图模型中选择了哪个项目 属性: public Order SelectedOrder { get => _selectedOrder; set => SetValue(ref _selectedOrder, value); } public class Order : BaseModel { pu

我已将网格绑定到viewmodel的
选择的Order.OrderItems
。我知道选择了哪个
订单
,但一旦用户单击
网格的行
(如此具体的
项目
),如何知道视图模型中选择了哪个
项目

属性:

public Order SelectedOrder
{
      get => _selectedOrder;
      set => SetValue(ref _selectedOrder, value);

}
public class Order : BaseModel
{
      public ObservableCollection<Order.Item> OrderItems { get; set; }
}
<dataGrid:DataGrid ItemsSource="{Binding SelectedOrder.OrderItems}" SelectionEnabled="True" SelectedItem="{Binding SelectedOrder.OrderItems}">
    <dataGrid:DataGrid.Columns>
        <dataGrid:DataGridColumn Title="ItemId" PropertyName="ItemId" />
        <dataGrid:DataGridColumn Title="ItemName" PropertyName="ItemId" />
    </dataGrid:DataGrid.Columns>
</dataGrid:DataGrid>   
订单包含显示在网格上的订单项列表:

public Order SelectedOrder
{
      get => _selectedOrder;
      set => SetValue(ref _selectedOrder, value);

}
public class Order : BaseModel
{
      public ObservableCollection<Order.Item> OrderItems { get; set; }
}
<dataGrid:DataGrid ItemsSource="{Binding SelectedOrder.OrderItems}" SelectionEnabled="True" SelectedItem="{Binding SelectedOrder.OrderItems}">
    <dataGrid:DataGrid.Columns>
        <dataGrid:DataGridColumn Title="ItemId" PropertyName="ItemId" />
        <dataGrid:DataGridColumn Title="ItemName" PropertyName="ItemId" />
    </dataGrid:DataGrid.Columns>
</dataGrid:DataGrid>   
公共类顺序:BaseModel
{
公共ObservableCollection OrderItems{get;set;}
}
网格:

public Order SelectedOrder
{
      get => _selectedOrder;
      set => SetValue(ref _selectedOrder, value);

}
public class Order : BaseModel
{
      public ObservableCollection<Order.Item> OrderItems { get; set; }
}
<dataGrid:DataGrid ItemsSource="{Binding SelectedOrder.OrderItems}" SelectionEnabled="True" SelectedItem="{Binding SelectedOrder.OrderItems}">
    <dataGrid:DataGrid.Columns>
        <dataGrid:DataGridColumn Title="ItemId" PropertyName="ItemId" />
        <dataGrid:DataGridColumn Title="ItemName" PropertyName="ItemId" />
    </dataGrid:DataGrid.Columns>
</dataGrid:DataGrid>   

您希望将
SelectedItem
绑定到视图模型上的属性,而不是绑定到可能的项集合。如果您查看输出窗口,您应该希望看到某种形式的绑定错误

从根本上改变这一点:

SelectedItem="{Binding SelectedOrder.OrderItems}"
例如:

SelectedItem="{Binding SelectedOrderItem}"
然后还需要将该属性添加到视图模型中

e、 g


我想过这个,但不是;无法使用我必须阅读选定项目的方式?@Arie抱歉,我不确定我是否理解您的问题。是否希望
SelectedOrderItem
属性位于您的
Order
类中?如果您查看OrderItems(项目列表)属于Order,则为否。Grid绑定到SelectedOrder.OrderItems(selected order在其他地方被选中,所以Grid可以使用它),所以现在Grid使用选中订单的内部列表,这就是为什么我使用:ItemsSource=“{Binding SelectedOrder.OrderItems}”来显示网格上的项目。因此,您的意思是保持ItemsSource=“{Binding SelectedOrder.OrderItems}”不变,但按照您的建议创建另一个属性,并将此行更改为:SelectedItem=“{Binding SelectedOrder.OrderItems}”,例如:SelectedItem=“{Binding SelectedOrderItems}”(新属性)。这就是你的意思?@Arie,没错。您必须分别处理这两个属性。这是正确的,如果要在视图模型中绑定
SelectedItem
,则需要将其绑定到非
ItemsSource
的内容。基本上,
itemsource
应该为控件提供多个值,
SelectedItem
应该是一个值。