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
所以我需要将一个简单的标签绑定到从 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