【发布时间】:2016-11-13 16:05:30
【问题描述】:
我有一个奇怪的例外,编译器告诉我指定的强制转换无效,即使我正在做的事情非常简单。
我有一个绑定到 ObservableCollection 的 ListView。在我的 Listview 里面是一个带有 Grid 的 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; }
}
视图模型:
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:指定的强制转换无效。这很奇怪,因为我不知道在哪里寻找错误。
【问题讨论】:
-
哪个特定绑定导致了问题?被绑定的属性是什么类型的?
-
只是图像在工作。标签绑定到一个简单的字符串。如果我用 TextCell 替换标签,异常就消失了。我需要使用标签:)
-
您正在绑定 CategoryName 和 Description,这些在您的模型中吗?
-
抱歉搞砸了。更新了我的答案
-
我能够将上面的代码复制并粘贴到一个新项目中,在删除对 BaseViewModel 的引用并设置 BindingContext 之后,它工作得很好。我认为问题出在未发布的代码中——与周围页面、BaseViewModel 或 BaseViewModel 如何绑定到视图的一些交互。尝试简化显示此 ListView 的页面以及整个页面的 ViewModel,看看是否有帮助。
标签: c# xamarin xamarin.forms