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