0

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

2 回答 2

1

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

        this.DataContext = this;

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

在 WPF 中绑定文本框的快速回顾

第一步:在窗口类中声明一个属性

首先,您应该在您的窗口的类中声明一个属性,即在您的新窗口的 .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。

于 2017-11-03T16:31:38.083 回答
0

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

但是,如果您的文本块的 DataContext 具有属性“MyModel”并且此“MyModel”-对象具有属性“TextVar”,则您的绑定仍然有效。

如果您想在运行时查找数据上下文和绑定,请使用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;
于 2013-02-19T07:08:30.690 回答