类中的WPF DataBinding(Expression Blend)

时间:2015-08-12 23:33:17

标签: c# wpf expression-blend

您好我有一个名为GameEngine.cs的课程

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)所以我“创建样本数据” - >来自班级 - >我选择了游戏引擎。

然后我插入了一个文本框并将其绑定到GameEngine.Life的DataContext

当我运行项目时,文本框中没有任何内容。

所以我尝试插入一个事件处理程序whenGridLoaded,其中我初始化了一个新的游戏实例。 GameEngine游戏=新GameEngine(100);

我预计100会出现在textBox中但没有发生任何事情。

修改

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

1 个答案:

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