【问题标题】:Property becoming null C# WPF属性变为空 C# WPF
【发布时间】:2013-12-12 05:52:30
【问题描述】:

我在设置数据时遇到属性变为 null 的问题,

SelectedItem="{Binding PropertyName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"

public className PropertyName
{
get{return this._PropertyName;}
set{this._PropertyName = value;}
}

问题是当我在视图模型中分配数据时

PropertyName = new className ();

当我调试和检查时,setter 中的"value" 为空

【问题讨论】:

  • 旁注:如果您调整类型和属性的大小写,它可能会对您和我们有所帮助。这非常令人困惑。
  • PropertyChanged 事件的实现在哪里?

标签: c# wpf properties null


【解决方案1】:

问题出在Mode=two-way 上,它指出对 UI 所做的任何更改都将反映到被绑定的属性上,反之亦然,但由于您尚未将INotifyPropertyChanged 接口的OnPropertyChanged 事件添加到绑定到 UI 的属性,您将面临问题。 只需将PropertyChanged 添加到绑定到 UI 的所有属性中,

public className PropertyName
{
   get{return this._PropertyName;}
   set
   {
      this._PropertyName = value;
      OnPropertyChanged("PropertyName");
   }
}

#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// Raises this object's PropertyChanged event.
        /// </summary>
        /// <param name="propertyName">The property that has a new value.</param>
        protected virtual void OnPropertyChanged(string propertyName)
        {    
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null)
            {
                var e = new PropertyChangedEventArgs(propertyName);
                handler(this, e);
            }
        }

        #endregion

【讨论】:

    【解决方案2】:

    你的类应该实现INotifyPropertyChanged接口

    public className PropertyName
    {
        get { return this._PropertyName; }
        set 
        {
           this._PropertyName = value; 
           if(PropertyChanged != null)
           {
              PropertyChanged(this, new PropertyChangedEventArgs("PropertyName"));
           }
        }
    }
    

    当您在代码中更改属性的值时,UI 不知道它并将 null 值反映回您的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 2016-05-04
      • 2013-09-17
      • 2013-10-12
      • 1970-01-01
      相关资源
      最近更新 更多