【问题标题】:Xamarin.Forms Exception System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocationXamarin.Forms 异常 System.Reflection.TargetInvocationException:调用的目标已引发异常
【发布时间】:2019-01-22 12:00:45
【问题描述】:

我是 Xamarin.Forms 的新手,我有一个无法解决的问题。

当我点击一个按钮时,它应该导航到 RegistracijaKorisnika.xaml 页面(它是波斯尼亚语 .. 抱歉),但不是因为异常:

System.Reflection.TargetInvocationException:调用目标抛出异常

RegistracijaKorisnika.xaml 页面有 ViewModel 页面 RegistracijaKorisnikaViewModel.cs,当我放入 RegistracijaKorisnika.xaml.cs 行时:

BindingContext = new RegistracijaKorisnikaViewModel()

发生异常。

当我删除行时

BindingContext = new RegistracijaKorisnikaViewModel() 

我可以导航到 RegistracijaKorisnika.xaml。 这是代码,我希望你能帮助我。

这是 RegistracijaKorisnika.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="ITJobFinder.View.RegistracijaKorisnika">
    <ContentPage.Content>
        <StackLayout>
            <Entry Placeholder="Ime" x:Name="entryImeKorisnika" Text="{Binding ImeKorisnika}"/>
            <Entry Placeholder="Prezime" x:Name="entryPrezimeKorisnika" Text="{Binding PrezimeKorisnika}"/>
            <Entry Placeholder="Email" x:Name="entryEmailKorisnika" Text="{Binding EmailKorisnika}"/>
            <Entry Placeholder="Password" x:Name="entryPasswordKorisnika" Text="{Binding PasswordKorisnika}"/>
            <Entry Placeholder="Naziv zavrsene obrazovne institucije" x:Name="entryNazivFakulteta" Text="{Binding NazivObrazovanjaKOrisnika}"/>
            <Entry Placeholder="Godina zavrsetka obrazovanja" x:Name="entryGodinaZavrsetkaObrazovanja" Text="{Binding GodinaZavrsetkaObrazovanja}"/>
            <Button Text="Registruj se!" Command="{Binding SaveNewUser}"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

这是 RegistracijaKorisnika.xaml.cs

namespace ITJobFinder.View
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class RegistracijaKorisnika : ContentPage
    {
        public RegistracijaKorisnika ()
        {
            InitializeComponent ();
            BindingContext = new RegistracijaKorisnikaViewModel();
        }
    }
}

这是 RegistracijaKorisnikaViewModel.cs

namespace ITJobFinder.ViewModel
{
    public class RegistracijaKorisnikaViewModel : BaseViewModel
    {
        private string imeKorisnika;
        private string prezimeKorisnika;
        private string emailKorisnika;
        private string passwordKorisnika;
        private string nazivObrazovanjaKOrisnika;
        private string godinaZavrsetkaObrazovanja;

        public string ImeKorisnika
        {
            get => imeKorisnika;
            set
            {
                imeKorisnika = value;
                OnPropertyChanged();
            }
        }
        public string PrezimeKorisnika
        {
            get => PrezimeKorisnika;
            set
            {
                prezimeKorisnika = value;
                OnPropertyChanged();
            }
        }
        public string EmailKorisnika
        {
            get => emailKorisnika;
            set
            {
                emailKorisnika = value;
                OnPropertyChanged();
            }
        }
        public string PasswordKorisnika
        {
            get => passwordKorisnika;
            set
            {
                passwordKorisnika = value;
                OnPropertyChanged();
            }
        }
        public string NazivObrazovanjaKOrisnika
        {
            get => nazivObrazovanjaKOrisnika;
            set
            {
                nazivObrazovanjaKOrisnika = value;
                OnPropertyChanged();
            }
        }
        public string GodinaZavrsetkaObrazovanja
        {
            get => godinaZavrsetkaObrazovanja;
            set
            {
                godinaZavrsetkaObrazovanja = value;
                OnPropertyChanged();
            }
        }

        public ICommand SaveNewUser { get; private set; }
        private DataBaseContext _context;

        public RegistracijaKorisnikaViewModel()
        {
            _context = new DataBaseContext();
            SaveNewUser = new Command(SaveUser);

        }
        void SaveUser()
        {
            Korisnik k = new Korisnik
            {
                ImeKorisnika = ImeKorisnika,
                PrezimeKorisnika = PrezimeKorisnika,
                EmailKorisnika = EmailKorisnika,
                PasswordKorisnika = PasswordKorisnika,
                GodinaZavrsetkaObrazovanja = GodinaZavrsetkaObrazovanja,
                NazivObrazovanjaKOrisnika = NazivObrazovanjaKOrisnika
            };
            _context.Korisnici.Add(k);
            _context.SaveChanges();
        }
    }
}

【问题讨论】:

  • 你能把这行注释掉,然后再试一次:SaveNewUser = new Command(SaveUser); 吗?如果您使用的是视觉工作室,您可以在抛出异常后按 F5/继续吗?它很可能会在控制台输出中显示更详细的异常
  • @Csharpest 我评论了那行,但也有同样的例外。当我按继续时,这会显示在我的输出中
  • 08-14 18:37:02.755 E/mono (12983):未处理的异常:08-14 18:37:02.755 E/mono (12983):System.Reflection.TargetInvocationException:异常已发生由调用的目标抛出。 ---> System.NullReferenceException:对象引用未设置为对象的实例
  • 好吧,这对我们没有任何帮助。杰森说得好,看看他的回答。除此之外,它可能是您的 DBContext 或 BaseViewModel 类。或者您是否对 RegistracijaKorisnika 课程隐瞒了什么?
  • 非常感谢您抽出宝贵时间,Jason 是对的。

标签: xaml xamarin exception xamarin.forms binding


【解决方案1】:

此 get 将导致自引用循环 - 您的 get 应使用小写的内部变量,而不是大写的属性名称

   public string PrezimeKorisnika
    {
        // should be "prezimeKorisnika"
        get => PrezimeKorisnika;
        set
        {
            prezimeKorisnika = value;
            OnPropertyChanged();
        }
    }

【讨论】:

  • 非常感谢......这些愚蠢的错误一直在发生。谢谢你哦
猜你喜欢
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多