【问题标题】:Binding text to my textblock isn't working将文本绑定到我的文本块不起作用
【发布时间】:2012-12-11 07:34:22
【问题描述】:

这是 xaml:

<TextBlock Text="{Binding Errors}" Grid.Row="3" Foreground="Red"/>

这是 ViewModel 代码:

  private string _errors = "";
 public string Errors
    {
        get { return this._errors; }
        set
        {
            if(_errors != value)
            {
                _errors = value;
                RaisePropertyChanged(() => Errors);
            }
        }
    }

然后在某个函数中我更改了_errors 变量

  _errors = "Compiler Errors :\r\n";

但是在 TextBlock 中什么也没有发生。我做错了什么?

【问题讨论】:

  • 控制台有绑定错误吗?
  • @Jonas 在控制台中?你什么意思?
  • 可能textblock的datacontext没有设置为viewmodel对象
  • 在 Visual Studio 输出窗口中(视图 > 输出)
  • @Jonas 那里什么都没有发生,我没有遇到任何异常,它只是不起作用。

标签: c# wpf data-binding binding


【解决方案1】:
private string _errors = "";
public string Errors
{
    get { return this._errors; }
    set
    {
        if(_errors != value)
        {
            _errors = value;
            RaisePropertyChanged("Errors");
        }
    }
}

这样设置:

Errors = "..."

我不知道 RaisePropertyChanged 方法是如何工作的,但是如果执行 lambda 表达式 ()=>Errors,它将返回 _errors 中包含的字符串,而不是更改的属性的名称?因此,如果方法存在,请尝试直接给出属性的名称。

【讨论】:

  • 我添加了一个小编辑,可以帮助您理解。我认为您试图通知具有 _errors 字符串内容名称的属性。对不起我的英语
  • 很抱歉,但这不是问题,我仍然使用与 lambda 表达式相同的方法,我根本没有更改依赖属性。
  • @idish 好的,那么,你改变了什么?只有错误=“...”?如果是,这是因为当你通过调用Errors = "..."来设置属性时,会执行该属性的方法集,如果你只是设置变量_errors,它会设置变量而不调用Errors的set方法,然后不通知更改。
  • @idish 谢谢你,但重要的是你改进了。很高兴能提供帮助。
  • 对不起,我想我会取消对你的回答的接受,我不想误导其他人,希望你能理解。我仍然会支持你。
【解决方案2】:

您正在直接设置 _errors 变量 - 所以没有 RaisePropertyChanged 被触发。尝试通过设置值

Errors = = "Compiler Errors :\r\n";

【讨论】:

  • 那么,我的依赖属性会是什么样子?
  • @idish 您的“错误”不是依赖属性。它只是一个在设置时会引发数据更改事件的属性。将代码_errors = "Compiler Errors :\r\n";更改为Errors = "Compiler Errors :\r\n";
  • @Colin 请举个例子?
  • @Colin 你的意思是,该属性将是自动属性?
  • 关于依赖属性的好文章:codeproject.com/Articles/140620/…
猜你喜欢
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2015-08-12
  • 2023-04-04
  • 2011-01-28
  • 2011-10-15
相关资源
最近更新 更多