TextBlock绑定不起作用

时间:2013-02-19 07:01:18

标签: wpf binding textblock

我有一个TextBlock绑定到我的模型中的属性。我的模型坐在我的视图模型中,与窗口绑定。

<TextBlock Text="{Binding MyModel.TextVar,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBlock>

TextVar是一个字符串属性,它调用Notify ...

的函数

所以,我不明白为什么它不起作用。 (OutPut中没有绑定错误。)

修改

    string _textVar;
    public string TextVar
    {
        get
        {
            return _textVar;
        }
        set
        {
            _textVar= value;
            NotifyPropertyChanged("TextVar");
        }
    }


    private void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)-- HERE THE PROPBLEM, IT ARRIVE NULL
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;

2 个答案:

答案 0 :(得分:1)

似乎一切都很完美,现在只需在你班级的构造函数下添加这一行。

        this.DataContext = this;

当您在某个父窗口中声明了另一个DataContext时,问题就出现了。我遇到了同样的问题,这个解决方案对我有用。

在WPF中绑定TextBox的快速回顾

步骤1:在窗口类中声明属性

首先,你应该在你窗口的类中声明一个属性,即在新窗口的.xml.cs文件中。

string _someVariable;
public string NameOfProperty
{
    get
    {
        return _someVariable;
    }
    set
    {
        _someVariable= value;
    }
}

第2步:将属性绑定到TextBox

现在使用以下语法将TextBox绑定到新创建的属性。

{Binding Path=NameOfProperty}

Path注意到要绑定的属性,但是,由于Path是绑定的默认属性,如果您愿意,可以将其保留,如下所示:

{Binding NameOfProperty}

第3步:声明窗口的DataContext 您的解决方案应该可以使用到现在,但是如果您使用某种模式,则应该定义窗口的DataContext。

答案 1 :(得分:0)

使用Mode = TwoWay绑定TextBlock是没有意义的,因为它是TextBlock而不是TextBox。

但是如果你的textblock的DataContext有一个属性“MyModel”而这个“MyModel” - 对象有一个属性“TextVar”,那么你的绑定工作。

如果你想在运行时查找你的datacontext和绑定,请使用Snoop

编辑:如果你像你一样进行绑定,你需要的是

public class MyViewmodel
{
  public MyOtherClass MyModel {get;set;}
}

public class MyOtherClass
{
   public string TextVar {get;set;}
}

windows.xaml.cs ctor:

 this.data = new MyViewmodel(); 
 this.DataContext = this.data;