WPF 绑定到在 MainWindow 中创建的对象 class

WPF Binding to object created within MainWindow class

所以我需要将一个简单的标签绑定到从 class 创建的对象的 属性。我尝试创建的 Class 是这样的:

    public class Creature : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string name)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }
    private string _Name = "Default";
    public string Name
    {
        get { return _Name; }
        set
        {
            _Name = value;
            OnPropertyChanged(nameof(Name));
        }
    }
    private string _Gender = "Default";
    public string Gender
    {
        get { return _Gender; }
        set
        {
            if (_Gender != value)
            {
                _Gender = value;
                OnPropertyChanged(nameof(Gender));
            }
        }
    }
}

然后我在 MainWindow.xaml.cs 中创建它的实例,如下所示:

    public partial class MainWindow : Window
{
    private Creature Player = new Creature();
    public MainWindow()
    {
        InitializeComponent();
        //Tried setting DataContext in hopes of being able to access Player object
        DataContext = this;
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Player.Gender = "Male";
        Player.Name = "Mike";
        //This bit of code here is used to check if value has changed by displaying it in a textbox
        textBox.Text = "Name: " + Player.Name;
        textBox.Text += "\nGender: " + Player.Gender;
    }
    private void button2_Click(object sender, RoutedEventArgs e)
    {
        Player.Gender = "Female";
        Player.Name = "Sarah";
        textBox.Text = "Name: " + Player.Name;
        textBox.Text += "\nGender: " + Player.Gender;
    }
}

问题是我不知道这里的 DataContext 应该是什么,因为无论我尝试什么我都无法访问 Player 字段,我尝试将它设置为 public,没有改变什么。我仍然可以绑定到 class "Creature" 但不能绑定到字段,有没有办法对字段 Creature 进行更改,也许可以应用于 class?

只需将 class 实例分配给 MainWindow 构造函数中的 DataContext

public Creature player;
public MainWindow()
{
    InitializeComponent();
    player = new Creature();
    this.DataContext = player;
}

this 代表当前实例,因此在您的示例中它指的是 class MainWindow