2015-08-12 2 views
0

Привет У меня есть класс с именем GameEngine.csWPF DataBinding из класса (Expression Blend)

using System; 

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

namespace GameEnginee 
{ 
public class GameEngine 
{ 
    private int life; 

    public String Life { get { return life.ToString(); } } 

    public GameEngine(int life) 
    { 
     this.life = life; 
    } 

} 
} 

1) Я использовал выражение смесь и добавил GameEngine.cs в обозревателе решений и щелкнул "построить проект".

2) Затем на вкладке «Данные» есть «Создать образцы данных» или «Создать данные». Я сначала попытался создать источник данных, но я не могу найти gameengine. Затем я попытался создать образец данных, и я смог найти игровой движок.

3) Итак, я создаю данные образца -> Из класса -> И я выбрал игровой движок.

Затем я вставил текстовое поле и сковал его DataContext из GameEngine.Life

Когда я запускаю проект ничего не появляется в текстовом поле.

Так что я попытался вставить обработчик событий, когдаGridLoaded, в котором я инициализировал новый экземпляр игры. GameEngine game = новый GameEngine (100);

Я ожидал, что 100 появится в текстовом поле, но ничего не произошло.

EDIT

using System; 

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

имен GameEnginee {

общественного класса GameEngine: INotifyPropertyChanged

{ 

    private int life; 


    public int Life 
    { 
     get 
     { 
      return life; 
     } 
    } 

    public GameEngine(int life) 
    { 
     this.life = life; 
    } 

    public void StartGame() 
    { 
     NotifyPropertyChanged("Life"); 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(string info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 
} 
+0

Является TextBlock в главном окне? Когда объект движка игры создается по отношению к тому, когда создается текстовый блок? –

+0

Если игровой движок создан после текстового блока, жизненное значение не будет перенесено в текстовый блок, потому что вы не используете свойство зависимости. –

ответ

1

Реализовать INotifyPropertyChanged интерфейс в вашем GameEngin классе и следовать этому article.

В соответствии с вышеуказанной статьей (INotifyPropertyChanged) вы должны иметь OnProperyChanged("Life") в Set части вашего Life. он может сообщить об изменениях этого свойства в ваш UI.

Например тест что-то вроде этого:

public class GameEngin:INotifyPropertyChanged 
{ 
    private int _life; 

    public int Life 
    { 
     get 
     { 
      return _life; 
     } 
     set 
     { 
      _life = value; 
      OnProperyChanged("Life") 
     } 
    } 

    public GameEngine() 
    { 
     this.Life = 3; // For Test 
    } 


    //--------------------------------------------------------------- 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnProperyChanged(string info) 
    { 
     if (PropertyChanged != null) 
     { 
      var handler= PropertyChanged ; 
      handler(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 
+0

hI Я его отредактировал. проблема заключается в том, что после компиляции его не появляется в «Создание источника данных» в разделе «Вкладка« Данные », но появляется только в« Создать образец данных ». После того, как я свяжусь с использованием Sample Data Source, в текстовом поле появляется случайное число. Но когда я компилирую и запускаю его, в текстовом поле ничего не отображается. – RStyle

+0

см. Мое редактирование выше – RStyle

+0

Попробуйте образец класса в моем ответе. – RAM

Смежные вопросы