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

iNC*_*ON_ 10 c# xamarin xamarin.forms

我有一个奇怪的例外,编译器告诉我指定的强制转换是无效的,即使我正在做的非常简单.

我有一个ListView绑定到ObservableCollection.我的Listview内部是一个带网格的ViewCell.Xamarin.Forms版本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>
Run Code Online (Sandbox Code Playgroud)

模型:

 public class GiftModel {

        public string GiftName { get; set; }
        public string GiftDescription { get; set; }
        public ImageSource GiftImage { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

视图模型:

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"),
                },
            };
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以我已经尝试了一切,但如果我使用例如TextCell,那么Exception就不见了.System.InvalidCastException:指定的强制转换无效.这很奇怪,因为我不知道在哪里寻找Bug.

Muh*_*han 13

我也有这个问题,问题出在了xaml.我有一个<StackLayout>内部<DataTemplate>,你可以删除你的<Grid>,这应该解决问题.

你知道吗,你可以替换<Grid><ImageCell>:

<ListView.ItemTemplate>
    <DataTemplate>
        <ImageCell
            Text="{Binding GiftName}"
            Detail="{Binding GiftDescription}"
            ImageSource="{Binding GiftImage}">
        </ImageCell>
    </DataTemplate>
</ListView.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

  • 如果您仍然想使用 Grid,请将其包装在 ViewCell 标签中 &lt;ViewCell&gt; &lt;Grid&gt; (2认同)

小智 12

你可以用 放在里面。

像这样的东西

<ListView.ItemTemplate>
<DataTemplate>
     <ViewCell>
          <StackLayout>
          </StackLayout>
     </ViewCell>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)


Gue*_*est 5

从数据模板中删除<ViewCell>。这应该可以解决该错误。<Grid>将在<CollectionView>

 <ListView.ItemTemplate>
     <DataTemplate>
         <Grid>
         :    
         :    
         </Grid>
     </DataTemplate>
 </ListView.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)