C# 简单数据绑定问题

C# 简单数据绑定问题,c#,wpf,data-binding,C#,Wpf,Data Binding,我不知道这个简单的绑定有什么问题。 单击第一个或第二个单选按钮时,不显示姓名或姓氏 1) Xaml 3) Person.cs class Person : INotifyPropertyChanged { string firstName; string lastName; public string FirstName { get { return firstName; }

我不知道这个简单的绑定有什么问题。 单击第一个或第二个单选按钮时,不显示姓名或姓氏

1) Xaml

3) Person.cs

class Person : INotifyPropertyChanged
    {
        string firstName;
        string lastName;

        public string FirstName
        {
            get { return firstName; }
            set { firstName = value;
                  OnPropertyChanged("FirstName");
                } 
        }

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

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

非常感谢

您需要在代码中实际设置绑定源代码,为此您需要StackPanel的名称。必须将名称添加到最后一个堆栈面板。第一排的那个

<StackPanel 
  ...
  Name="m_panel" />

编辑澄清了要命名的堆栈面板

抱歉,它不起作用。顺便说一下,我还添加了绑定源@northTiger,我在我的计算机上验证了这一点。你叫哪个StackPanel?它必须是第二个。哦,在我从文本块中删除Source={StaticResource personInfo}后,它会工作。我的问题仍然是,如果我不添加m_panel.DataContext=p,为什么Source={StaticResource personInfo}不工作;谢谢@northTiger,我相信原因是因为您从未在实际代码中实际更新personInfo值。您是否查看过有关调试输出中绑定错误的任何消息?任何可能有助于解决问题的陈述?
class Person : INotifyPropertyChanged
    {
        string firstName;
        string lastName;

        public string FirstName
        {
            get { return firstName; }
            set { firstName = value;
                  OnPropertyChanged("FirstName");
                } 
        }

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

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
<StackPanel 
  ...
  Name="m_panel" />
public void onClick1(Object h , RoutedEventArgs arg)
{
    p.FirstName = list[0].FirstName;
    p.LastName = list[0].LastName;
    m_panel.DataContext = p;
}