Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
属性变为空C#WPF_C#_Wpf_Properties_Null - Fatal编程技术网

属性变为空C#WPF

属性变为空C#WPF,c#,wpf,properties,null,C#,Wpf,Properties,Null,当我设置数据时,我面临属性变为空的问题 SelectedItem="{Binding PropertyName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" public className PropertyName { get{return this._PropertyName;} set{this._PropertyName = value;} } 问题是在视图模型中指定数据时 PropertyName = new className

当我设置数据时,我面临属性变为空的问题

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

public className PropertyName
{
get{return this._PropertyName;}
set{this._PropertyName = value;}
}
问题是在视图模型中指定数据时

PropertyName = new className ();

“值”当我调试并检查setter时,setter中的
为空

问题在于
模式=双向
,该模式表示在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
public类名称PropertyName
{
获取{返回此。\u PropertyName;}
设置
{
这是。_PropertyName=value;
OnPropertyChanged(“PropertyName”);
}
}
#区域INotifyProperty更改成员
公共事件属性更改事件处理程序属性更改;
/// 
///引发此对象的PropertyChanged事件。
/// 
///具有新值的属性。
受保护的虚拟void OnPropertyChanged(字符串propertyName)
{    
PropertyChangedEventHandler处理程序=this.PropertyChanged;
if(处理程序!=null)
{
var e=新的PropertyChangedEventArgs(propertyName);
处理者(本,e);
}
}
#端区

您的类应该实现
INotifyPropertyChanged
接口

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

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

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