【问题标题】:TextBox - binding property doesn't refresh itselfTextBox - 绑定属性不会自行刷新
【发布时间】:2011-04-05 10:11:41
【问题描述】:

我有一个文本框,它的 Text 属性是这样绑定的

   <TextBox Name="txtBox">
        <TextBox.Text>
            <Binding Path="Data">

            </Binding>
        </TextBox.Text>
    </TextBox>

归档的数据可以在我的程序中的不同位置进行更改。但是,如果我在其他控件中更改归档数据,则 t txtBox Text 属性不会自行刷新。我仍然可以看到旧值(尽管数据字段已更改)。 有什么办法可以强制文本框刷新自己或某事?

【问题讨论】:

    标签: wpf textbox refresh data-binding


    【解决方案1】:

    为了让您的文本框知道它所绑定的数据何时发生变化,它所绑定的类必须实现 INotifyPropertyChanged。下面是 C# 中的示例。如果将文本框绑定到属性 Data,则在执行 Data 属性的 setter 时文本框应该更新。请注意,INotifyPropertyChanged 需要引用 System.ComponentModel 命名空间(C# 中的 Using 或 VB 中的 Imports)。

    public class MyData : INotifyPropertyChanged
    {
        string _data;
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        public void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    
        public string Data
        {
            get
            {
                return _data;
            }
    
            set
            {
                _data = value;
                this.OnPropertyChanged("Data");
            }
        }
    }
    

    【讨论】:

    • 感谢您的回答。我会给它一个机会:) 但是我想知道是否有任何方法可以手动刷新 textbox.text 属性。类似 textbox.refresh() ??
    • 还有一个问题。有没有办法实现这个接口并使用自动属性?基本上我类中的所有属性都是以这种方式实现的 public DateTime Date { get;放; }
    • 关于手动刷新,这取决于您是想通过直接从视图访问控件还是从视图模型间接访问控件来进行。我提供的示例间接导致绑定从视图模型更新。因此,它归结为每当您引发 OnPropertyChanged 事件时。您可以随时提出事件 - 它不一定必须在 setter 中。
    • 关于自动属性,编译器会创建一个私有的backer并为你实现getter和setter。我不知道在调用 setter 时没有自己实现 setter 的任何其他方法来提高 OnPropertyChanged。
    • 再次感谢您的回答 :) 我使用了 INotifyPropertyChange,这很棒 :)
    【解决方案2】:

    您的 Data 属性所有者对象是否实现了 INotifyPropertyChanged? 如果没有,则执行它并触发 PropertyChanged 当您设置的属性被调用时

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-03
      • 2019-01-18
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      相关资源
      最近更新 更多