如何在 mvvm 中绑定多个选定的 syncfusion xamarin 表单数据网格项目?
how to bind multiple selected items of syncfusion xamarin forms datagrid in mvvm?
如果选择模式是单一的,我可以绑定 SelectedItem,但如果设置为多个,那么如何绑定它?
这是我尝试的单选模式
<sync:SfDataGrid Grid.Row="1" AutoGenerateColumns="False" AllowSorting="True"
AllowGroupExpandCollapse="True" AutoExpandGroups="True"
SelectionMode="Multiple" ColumnSizer="Star"
ItemsSource="{Binding LstItems}"
SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"
>
<sync:SfDataGrid.Columns>
<sync:GridTextColumn HeaderText="Name" MappingName="Name" />
<sync:GridTextColumn HeaderText="MRP" MappingName="MRP"/>
<sync:GridTextColumn HeaderText="Category" MappingName="Category" Width="0"/>
</sync:SfDataGrid.Columns>
<sync:SfDataGrid.GroupColumnDescriptions>
<sync:GroupColumnDescription ColumnName="Category"/>
</sync:SfDataGrid.GroupColumnDescriptions>
</sync:SfDataGrid>
在上面的 xaml 中,选择模式设置为多个,但我无法获得 xaml 中的 SelectedItems,如此处所述
在 SfDataGrid 中,无法像 SelectedItem 属性 一样将 SfDataGrid.SelectedItems 属性 绑定到视图模型,因为我们只能在 SfDataGrid 中获取选定的项目。因此,您将无法为 SelectedItems 属性.
绑定 XAML 中的值
但是,您可以通过为 SfDataGrid 编写不会影响 MVVM 模式的行为来实现您的要求。请参考以下代码片段。
<sfGrid:SfDataGrid x:Name="dataGrid"
AutoGenerateColumns="True"
ItemsSource="{Binding OrdersInfo}"
SelectionMode="Multiple">
<b:Interaction.Behaviors>
<b:BehaviorCollection>
<b:EventToCommand Command="{Binding SelectionCommand}"
CommandParameter="{x:Reference Name=dataGrid}"
EventName="SelectionChanged" />
</b:BehaviorCollection>
</b:Interaction.Behaviors>
</sfGrid:SfDataGrid>
// In ViewModel.cs
public ViewModel()
{
selectionCommand = new Command<SfDataGrid>(onSelectionChanged);
selectedItems = new ObservableCollection<object>();
}
private Command<SfDataGrid> selectionCommand;
public Command<SfDataGrid> SelectionCommand
{
get { return selectionCommand; }
set { selectionCommand = value; }
}
private ObservableCollection<object> selectedItems;
public ObservableCollection<object> SelectedItems
{
get { return selectedItems; }
set { selectedItems = value; }
}
private void onSelectionChanged(SfDataGrid obj)
{
//you can get the selected items in the datagrid
selectedItems = obj.SelectedItems;
}
此外,我们准备了一个示例供您参考,您可以从下面link.
下载相同的示例
示例 link:http://www.syncfusion.com/downloads/support/directtrac/168321/ze/DataGridDemo352928928
此致,
迪瓦卡
如果选择模式是单一的,我可以绑定 SelectedItem,但如果设置为多个,那么如何绑定它?
这是我尝试的单选模式
<sync:SfDataGrid Grid.Row="1" AutoGenerateColumns="False" AllowSorting="True"
AllowGroupExpandCollapse="True" AutoExpandGroups="True"
SelectionMode="Multiple" ColumnSizer="Star"
ItemsSource="{Binding LstItems}"
SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"
>
<sync:SfDataGrid.Columns>
<sync:GridTextColumn HeaderText="Name" MappingName="Name" />
<sync:GridTextColumn HeaderText="MRP" MappingName="MRP"/>
<sync:GridTextColumn HeaderText="Category" MappingName="Category" Width="0"/>
</sync:SfDataGrid.Columns>
<sync:SfDataGrid.GroupColumnDescriptions>
<sync:GroupColumnDescription ColumnName="Category"/>
</sync:SfDataGrid.GroupColumnDescriptions>
</sync:SfDataGrid>
在上面的 xaml 中,选择模式设置为多个,但我无法获得 xaml 中的 SelectedItems,如此处所述
在 SfDataGrid 中,无法像 SelectedItem 属性 一样将 SfDataGrid.SelectedItems 属性 绑定到视图模型,因为我们只能在 SfDataGrid 中获取选定的项目。因此,您将无法为 SelectedItems 属性.
绑定 XAML 中的值但是,您可以通过为 SfDataGrid 编写不会影响 MVVM 模式的行为来实现您的要求。请参考以下代码片段。
<sfGrid:SfDataGrid x:Name="dataGrid"
AutoGenerateColumns="True"
ItemsSource="{Binding OrdersInfo}"
SelectionMode="Multiple">
<b:Interaction.Behaviors>
<b:BehaviorCollection>
<b:EventToCommand Command="{Binding SelectionCommand}"
CommandParameter="{x:Reference Name=dataGrid}"
EventName="SelectionChanged" />
</b:BehaviorCollection>
</b:Interaction.Behaviors>
</sfGrid:SfDataGrid>
// In ViewModel.cs
public ViewModel()
{
selectionCommand = new Command<SfDataGrid>(onSelectionChanged);
selectedItems = new ObservableCollection<object>();
}
private Command<SfDataGrid> selectionCommand;
public Command<SfDataGrid> SelectionCommand
{
get { return selectionCommand; }
set { selectionCommand = value; }
}
private ObservableCollection<object> selectedItems;
public ObservableCollection<object> SelectedItems
{
get { return selectedItems; }
set { selectedItems = value; }
}
private void onSelectionChanged(SfDataGrid obj)
{
//you can get the selected items in the datagrid
selectedItems = obj.SelectedItems;
}
此外,我们准备了一个示例供您参考,您可以从下面link.
下载相同的示例示例 link:http://www.syncfusion.com/downloads/support/directtrac/168321/ze/DataGridDemo352928928
此致,
迪瓦卡