2016-11-05 20 views
0

したがって、単純なラベルをクラスから作成したオブジェクトのプロパティにバインドする必要があります。そして、私はこのようなMainWindow.xaml.csでそのインスタンスを作成WPF MainWindowクラス内で作成されたオブジェクトへのバインド

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)); 
      } 
     } 
    } 
} 

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; 
    } 
} 

問題は、私は知らないです、私は作成しようとしていますクラスは、このように書きます何を試しても、私はPlayerフィールドへのアクセスを取得できませんし、パブリックに設定しようとしましたが、何も変更しませんでした。私はまだ "クリーチャー"のクラスにバインドできますが、フィールドにはバインドできません。フィールドのクリーチャーに変更を加える方法はありますか?クラスにおそらく適用されますか?

答えて

1

ちょうどあなたのMainWindowコンストラクタでDataContextにあなたのクラスのインスタンスを割り当てる:あなたの例では、それは私が実際にそのことを考えていなかったクラスMainWindow

+0

を指して

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

thisは、現在のインスタンスを表しますそれがうまくいくかのように見えます。しかし、他の値を代入する必要がある場合はどうなりますか?何とかして、WPFコントロールのDataContextにテキストボックスのように設定することはできますか?編集:また、他の問題は、私は、クラス内の "プレーヤー"フィールドを初期化する必要がありますか、button.Click関数を使用してそのプロパティを変更することができなくなります – Zephylir

+0

私はなぜコントロールを設定したいのですか?そこ。とにかく、ビューモデルを結合したい場合は[this](http://stackoverflow.com/questions/10781863/can-a-view-have-two-view-models-as-its-data-context)をチェックしてください – SteppingRazor

+0

ボタン機能を使用して、実行時に名前や性別などの値を変更することができます。その事実でない場合は、最初にそのインスタンスを作成することに気をつけません。 – Zephylir

関連する問題