Xamarin.Forms 绑定指定的强制转换无效

问题描述:

我有一个奇怪的异常,编译器告诉我指定的强制转换无效,即使我所做的很简单.

I have a weird exception where the Compiler tells me that the Specified cast is not valid even though what im doing is very Simple.

我有一个绑定到 ObservableCollection 的 ListView.在我的 Listview 里面是一个带有网格的 ViewCell.Xamarin.Forms 版本 2.3.2.127

I have a ListView binded to a ObservableCollection. And inside my Listview is a ViewCell with a Grid. Xamarin.Forms Version 2.3.2.127

<ListView ItemsSource="{Binding GiftCollection}">
      <ListView.ItemTemplate>
        <DataTemplate>
          <ViewCell>
            <ViewCell.View>
              <Grid>
          <Grid.RowDefinitions>
            <RowDefinition Height="20"/>
            <RowDefinition Height="20"/>
          </Grid.RowDefinitions>
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="40"/>
          </Grid.ColumnDefinitions>

          <Label Grid.Row="0" Grid.Column="0" Text="{Binding GiftName}"/>
          <Label Grid.Row="1" Grid.Column="0" Text="{Binding GiftDescription}"/>
          <Image Grid.Row="0" Grid.RowSpan="2" Grid.Column="1" Source="{Binding GiftImage}"/>
        </Grid>
        </ViewCell.View>
      </ViewCell>
        </DataTemplate>
      </ListView.ItemTemplate>
    </ListView>

型号:

 public class GiftModel {

        public string GiftName { get; set; }
        public string GiftDescription { get; set; }
        public ImageSource GiftImage { get; set; }
    }

视图模型:

public class NextRoundViewModel : BaseViewModel {

        public NextRoundViewModel(ApplicationModel applicationModel) {
            ApplicationModel = applicationModel;
            Initialize();
        }

        public ApplicationModel ApplicationModel { get; set; }
        public ObservableCollection<GiftModel> GiftCollection { get; set; }
        public string CurrentRound => "Runde 2";

        private void Initialize() {
            GiftCollection = new ObservableCollection<GiftModel> {
                new GiftModel {
                    GiftName = "100 Punkte",
                    GiftDescription = "Test",
                    GiftImage = ImageSource.FromFile("Star.png"),
                },
                new GiftModel {
                    GiftName = "200 Punkte",
                    GiftDescription = "Test",
                    GiftImage = ImageSource.FromFile("Star.png"),
                },
                new GiftModel {
                    GiftName = "300 Punkte",
                    GiftDescription = "Test",
                    GiftImage = ImageSource.FromFile("Star.png"),
                },
            };
        }
    }

所以我尝试了所有方法,但是如果我使用例如 TextCell,则异常消失了.System.InvalidCastException:指定的强制转换无效.这很奇怪,因为我不知道去哪里寻找 Bug.

So ive tried everything but if i use for example a TextCell the Exception is gone. System.InvalidCastException: Specified cast is not valid. It is just weird because i dont know where to look for the Bug.

我也遇到了这个问题,问题出在 xaml 上.我的 <DataTemplate> 里面有一个 ,你可以删除你的 ,这应该可以解决问题.

I had this problem too, the issue was with the xaml. I had a <StackLayout> inside of my <DataTemplate>, you can remove your <Grid> and that should solve the problem.

您是否知道可以将 替换为 :

Did you know that you could replace the <Grid> with an <ImageCell>:

<ListView.ItemTemplate>
    <DataTemplate>
        <ImageCell
            Text="{Binding GiftName}"
            Detail="{Binding GiftDescription}"
            ImageSource="{Binding GiftImage}">
        </ImageCell>
    </DataTemplate>
</ListView.ItemTemplate>