我正在开发一个 xamarin 表单应用程序。我希望用户选择一些值,然后更新 CollectionView 以显示该行上的选定值。 2 是选定的值。它出现在此处,但有时会出现“索引超出范围”的错误。必须为非负数且小于集合的大小。 参数名称:索引'
C# 代码
ObservableCollection<DynamicReportsParameters> reportsParameters;
public ObservableCollection<DynamicReportsParameters> ReportsParameters
{
get
{
if (reportsParameters == null)
ReportsParameters = new ObservableCollection<DynamicReportsParameters>();
return reportsParameters;
}
set => reportsParameters = value;
}
void fun () {
int ix = 0;
if (veri1List[i] != "0")
{
ix = Int32.Parse(veri1List[i]);
}
if (ReportsParameters[ix] != null)
{
Console.WriteLine("veri2 list 0 :" + veri2List[0]);
Console.WriteLine("ix :" + ix);
DynamicReportsParameters dnp = new DynamicReportsParameters()
{
ACIKLAMA = ReportsParameters[ix].ACIKLAMA,
ACIKLAMA2 = veri2List[0],
KODID = ReportsParameters[ix].KODID,
ORJVALUE = ReportsParameters[ix].ORJVALUE,
PID = ReportsParameters[ix].PID,
SECIM = ReportsParameters[ix].SECIM,
TYPE = ReportsParameters[ix].TYPE,
VIEW_QUERY = ReportsParameters[ix].VIEW_QUERY,
VNUMBER = ReportsParameters[ix].VNUMBER,
};
ReportsParameters.Insert(ix, dnp);
ReportsParameters.RemoveAt(ix + 1);
//Console.WriteLine("AÇIKLAMA :" + ReportsParameters[ix].ACIKLAMA);
//ReportsParameters[ix].ACIKLAMA = "MERT";
//Console.WriteLine("AÇIKLAMA :" + ReportsParameters[ix].ACIKLAMA);
OnPropertyChanged();
}
XAML 代码
<dxcv:DXCollectionView ItemsSource="{Binding ReportsParameters, Mode=TwoWay}"
SelectionMode="Single"
Margin="8, 2, 8, 2"
VerticalOptions="StartAndExpand"
TapCommand="{Binding QueryPageOpenCommand}"
SelectedItems="{Binding SelectedReportsParameters}"
>
<dxcv:DXCollectionView.ItemTemplate>
<DataTemplate>
<Grid Padding="10, 8, 18, 8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<!--<ColumnDefinition Width="5*"/>-->
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<!--<RowDefinition/>-->
</Grid.RowDefinitions>
<Label Text="{Binding ACIKLAMA}"
FontSize="Medium"
Grid.Column="0"
Grid.Row="0"
Margin="0,2"
TextColor="Black"/>
<Label Text="{Binding ACIKLAMA2}"
FontSize="Medium"
Grid.Column="1"
Grid.Row="0"
Margin="0,2"
TextColor="Black" />
<Image Source="@drawable/touch.png" HeightRequest="20" Grid.Column="2" Grid.Row="0" />
</Grid>
</DataTemplate>
</dxcv:DXCollectionView.ItemTemplate>
</dxcv:DXCollectionView>
DXCollectionView的官方文档说道:
选择模式 = 单次所以您应该将当用户选择(点击)某个项目时,SelectedItem 属性将设置为一个对象,该对象指定数据源中与列表中所选项目相对应的项目。当用户再次点击所选项目时,选择将被清除,并且 SelectedItem 属性将设置为 null。 要以编程方式选择项目,请将数据源的项目对象分配给视图模型的属性并将 SelectedItem 属性绑定到它。
SelectedItems="{Binding SelectedReportsParameters}"
更改为
SelectedItem="{Binding SelectedReportsParameters}"
或将
SelectionMode="Single"
更改为
SelectionMode = Multiple
。此外,您还可以为所选项目绑定添加
Mode=TwoWay
。