Xamarin表示xaml Listview没有按照集合更改进行更新

时间:2015-03-18 07:31:43

标签: xaml listview xamarin xamarin.android xamarin.forms

您好我正在尝试通过添加和删除项目来更新listView。在listview中添加项目在iOS和Android中运行良好。但是删除它中的任何项目会给出错误的android,它在iOS上运行完美。 在Android中:每当我从列表视图中删除项目时,它都会从集合中删除,但在UI上删除后删除的UI上的最后一项,当我再次添加时,它会将先前删除的项目添加到列表而不是新的新项目中。请检查我使用的代码

<ListView  RowHeight="100" HorizontalOptions="End" ItemsSource="{Binding GuidePrices, Mode=OneWay}" >
  <ListView.ItemTemplate>
    <DataTemplate>
      <ViewCell>
        <ViewCell.View>
          <StackLayout  Orientation="Horizontal">
            <controls:BindablePicker ItemsSource="{Binding Prices}" WidthRequest="150" SelectedItem="{Binding SelectedProduct, Mode=TwoWay}" />
            <Button Text="Add" IsVisible="{Binding Action}">
              <b:Interaction.Behaviors>
                <b:BehaviorCollection>
                  <b:EventToCommand  CommandNameContext="{b:RelativeContext CampsiteViewPage}"
                        EventName="Clicked" 
                        CommandName="AddPriceListCommand"
                        CommandParameter="{Binding}" /> 
                </b:BehaviorCollection>
              </b:Interaction.Behaviors>
            </Button>
             <Button Text="Delete" IsVisible="{Binding Action, Converter={StaticResource cnvInvert}}">
              <b:Interaction.Behaviors>
                <b:BehaviorCollection>
                  <b:EventToCommand  CommandNameContext="{b:RelativeContext CampsiteViewPage}"
                        EventName="Clicked" 
                        CommandName="DeletePriceListCommand"
                        CommandParameter="{Binding}" /> 
                </b:BehaviorCollection>
              </b:Interaction.Behaviors>
            </Button>
          </StackLayout>
        </ViewCell.View>
      </ViewCell>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>

- 用于添加和删除命令的ViewModel代码

this.AddPriceListCommand = new Command((s) =>
        {
            if (_guidePrices != null)
                {
                _guidePrices.Add(new PricesListModel() { ListId = Guid.NewGuid(), Action = false, Prices = _campsite.Guides[0].Prices });
                }
        });

        this.DeletePriceListCommand = new Command((sender) => {

        var  _priseList = (from priceList in _guidePrices
                           where priceList == (PricesListModel)sender
                   select priceList).ToList();
        _guidePrices.RemoveAt(_guidePrices.IndexOf((PricesListModel)sender));

            });

我无法找到原因,为什么这会在Android上运行,因为相同的代码在ios中按预期工作。

1 个答案:

答案 0 :(得分:0)

_guidePrices的类型是什么?从List<T>中删除项目不会更新UI。您需要使用ObservableCollction<T>或提升PropertyChanged事件通知UI来更新