WPF在XAML上获取类实例空引用

埃里克·加拉尼(Erick Gallani)

我在尝试为我的XAML设置类实例时得到空引用。

XAML代码

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        xmlns:classes="clr-namespace:WpfApplication1.Classes"
        Title="MainWindow" Height="350" Width="525">

    <Window.Resources>
        <classes:Person x:Key="person" /> <!-- here getting null reference -->
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="Blue" />
            <Setter Property="FontSize" Value="30" />
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="FontFamily" Value="Arial" />
        </Style>
        <Style TargetType="TextBox">
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="Background" Value="LightGray" />
        </Style>
        <Style TargetType="Button">
            <Setter Property="Foreground" Value="DodgerBlue" />
            <Setter Property="BorderThickness" Value="0" />
            <Setter Property="Background" Value="White" />
        </Style>
    </Window.Resources>

    <StackPanel x:Name="stackPanelPerson" DataContext="{Binding Source={ StaticResource person }}">
        <TextBlock Text="Write your name" />
        <TextBox x:Name="boxUserName" Text="{Binding Name, Mode=TwoWay}"
                 Margin="0 20 0 0" />
        <TextBox x:Name="boxLastName" Text="{Binding LastName, Mode=TwoWay}"
                 Margin="0 20 0 0" />
        <TextBox x:Name="boxAge" Text="{Binding Age, Mode=TwoWay}"
                 Margin="0 20 0 0" />
        <Button x:Name="btnSayHello"
                Click="btnSayHello_Click"
                Margin="0 20 0 0">Say Hello</Button>
    </StackPanel>
</Window>

这是我的班级代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WpfApplication1.Classes
{
    public class Person : INotifyPropertyChanged
    {
        public Person()
        {
            this.Name = "Name";
            this.LastName = "LastName";
            this.Age = 22;
        }

        private String name;

        public String Name
        {
            get { return name; }
            set 
            { 
                name = value;
                OnPropertyChanged("Name");
                OnPropertyChanged("FullName");
            }
        }

        private String lastName;

        public String LastName
        {
            get { return lastName; }
            set 
            { 
                lastName = value;
                OnPropertyChanged("LastName");
                OnPropertyChanged("FullName");
            }
        }

        private int age;

        public int Age
        {
            get { return age; }
            set 
            { 
                age = value;
                OnPropertyChanged("Age");
            }
        }

        private String fullName;

        public String FullName
        {
            get { return string.Format("{0} {1}", Name, LastName); }
            set 
            { 
                fullName = value;
                OnPropertyChanged("FullName");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(string PropertyName)
        {
            if (PropertyName != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
            }
        }
    }
}

这是主窗口的后退代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using WpfApplication1.Classes;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        Person person;

        public MainWindow()
        {
            InitializeComponent();
            person = new Person();
        }

        private void btnSayHello_Click(object sender, RoutedEventArgs e)
        {
            string message = string.Format(" Hello {0} {1}, you told me that you are {2} years old. ", person.Name, person.LastName, person.Age);

            MessageBox.Show(message);
        }
    }
}

我不知道为什么要得到这个空引用,因为该类是在MainWindow()方法上创建的。

有人知道吗?

感谢大伙们。

ak

如您所见,如果您查看异常堆栈跟踪,PropertyChanged则为null。检查if (PropertyName != null)并不能防止这种情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 INotifyPropertyChanged 的 WPF Xaml 绑定类实例

来自分类Dev

从匿名类获取引用吨连续实例

来自分类Dev

Android自定义视图:在onDraw方法中的每个类成员上获取空引用

来自分类Dev

继续在 findViewById 上获取空引用

来自分类Dev

WPF中的空引用

来自分类Dev

java.lang.NullPointerException:尝试在获取其他类和方法的实例时在空对象引用上调用虚拟方法

来自分类Dev

XAML WPF的绑定/引用方法

来自分类Dev

Xaml中的类的调用实例

来自分类Dev

XAML文件中的引用类

来自分类Dev

如何在不创建新的空实例的情况下获取类的实例

来自分类Dev

从元类获取实例

来自分类Dev

获取CompiledMethod类的实例

来自分类Dev

获取类的特定实例

来自分类Dev

获取TypeScript类的实例?

来自分类Dev

从 require() 获取类实例

来自分类Dev

通过引用实例化类

来自分类Dev

从引用到类的实例化

来自分类Dev

来自属性的类实例引用

来自分类Dev

尝试在Application类的实例上调用getApplicationContext()会导致空对象引用错误

来自分类Dev

如何从实例中引用类的实例

来自分类Dev

空项目错误 - Xaml 内部错误错误 WMC9999:未将对象引用设置为对象的实例

来自分类Dev

从未初始化的变量中获取对类对象的引用-未实例化的对象

来自分类Dev

从XAML内部创建C#类的实例

来自分类Dev

Java8:有没有办法从类方法引用中获取实例方法引用?

来自分类Dev

如何从XAML引用静态类字段

来自分类Dev

对当前类xaml Windows Phone的引用

来自分类Dev

xaml中的引用无名称空间类

来自分类Dev

无法从xaml引用C ++ / cx类?(UWP)

来自分类Dev

尝试在HtmlAgilityPack中按类获取链接时,出现空引用异常

Related 相关文章

热门标签

归档