我有一个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;
答案 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;