未处理的异常:System.InvalidCastException:指定的强制转换无效。

我在 ListView 中实现了一个 SwitchCell;我希望能够访问 SwitchCell 的属性:On 和 text。我希望能够获取和设置 SwitchCell 的 OnProperty 以从 xaml.cs 类中更改/读取 Switch 状态。


当我运行代码时,我收到未处理的异常错误。我对 Xamarin 和 C# 都很陌生,因此任何解决问题的帮助/建议/示例都将不胜感激。


异常发生在var selectedItem = ((SwitchCell)sender).BindingContext as Relays; 在 SwitchCell.xaml.cs 中。


我的 Relay.cs 类如下:


using System;

using System.Collections.Generic;

using System.Text;


namespace Socket.Models

{

    public class Relays

    {

      public Boolean isOn { get; set; }       // Set the state of the 

                                                switch 


      public string State { get; set; }       // Get the state of the 

                                     switch based on the isOn property


      public string Name { get; set; }        // Set the name of the 

                                               relay in the list


      }

   }

我的 SwitchCell.xaml 如下:


  <?xml version="1.0" encoding="utf-8" ?>

      <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"

         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

         x:Class="Socket.SwitchCell"

         Title="Relay Control Page">


<ContentPage.Content>

    <StackLayout Padding="10,0,0,0">


        <ListView x:Name="lstView" SelectionMode="None">

            <ListView.ItemTemplate>

                <DataTemplate>

                    <SwitchCell x:Name="Sw1" Text="{Binding Name}" On=" 

                             {Binding isOn, Mode=TwoWay}" 

                                OnChanged="SwitchCell_OnChanged_2"/>

                </DataTemplate>

            </ListView.ItemTemplate>

        </ListView>


        </StackLayout>

    </ContentPage.Content>

</ContentPage>

这是我在 VS 2017 中遇到的错误:未处理的异常:System.InvalidCastException:指定的强制转换无效。发生了

我不确定这是否有用,但这是我从调用堆栈中得到的:

位于 C:\Users\ryno\Desktop\Xamarin\Socket\Socket\Socket\SwitchCell.xaml.cs 的 Socket.SwitchCell.SwitchCell_OnChanged_2 中的 0x1:42,13。

我不知道我做错了什么。任何帮助将不胜感激。谢谢。


郎朗坤
浏览 491回答 2
2回答

斯蒂芬大帝

只有似乎发生的演员在这里:&nbsp;var selectedItem = ((SwitchCell)sender).BindingContext as Relays;检查是否sender确实是SwitchCell.

FFIVE

原来这是我的名字。感谢您对@Gerald Versluis 的所有帮助以及@Benl 的建议。
打开App,查看更多内容
随时随地看视频慕课网APP