Вопрос:

Xamarin.Forms Binding Указанное приведение неверно

c# xamarin xamarin.forms

8448 просмотра

2 ответа

52 Репутация автора

У меня есть странное исключение, когда компилятор говорит мне, что приведенное приведение недействительно, хотя то, что я делаю, очень просто.

У меня есть 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>

Модель:

 public class GiftModel {

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

ViewModel:

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: указанное приведение недопустимо. Это просто странно, потому что я не знаю, где искать ошибку.

Автор: iNCEPTiON_ Источник Размещён: 13.11.2016 04:05

Ответы (2)


10 плюса

350 Репутация автора

Решение

У меня тоже была эта проблема, проблема была с xaml. У меня была <StackLayout>внутренняя часть моей <DataTemplate>, вы можете удалить свою, <Grid>и это должно решить проблему.

Знаете ли вы , что вы могли бы заменить <Grid>с <ImageCell>:

<ListView.ItemTemplate>
    <DataTemplate>
        <ImageCell
            Text="{Binding GiftName}"
            Detail="{Binding GiftDescription}"
            ImageSource="{Binding GiftImage}">
        </ImageCell>
    </DataTemplate>
</ListView.ItemTemplate>
Автор: Muhammad Khan Размещён: 11.02.2018 01:57

0 плюса

159 Репутация автора

Вы можете разместить внутри с.

Что-то вроде этого

<ListView.ItemTemplate>
<DataTemplate>
     <ViewCell>
          <StackLayout>
          </StackLayout>
     </ViewCell>
</DataTemplate>

Автор: Crennotech Размещён: 13.06.2019 02:19
Вопросы из категории :
32x32