OnPropertyChanged无法编译

时间:2014-01-24 22:14:09

标签: c# wpf xaml binding inotifypropertychanged

我正在尝试将xaml中标签的内容绑定到C#后面的公共变量。永远不会从UI设置值,它应该触发C#中的值。

这个VS2008 C#+ WPF

然而,它没有编译,它说:

错误CS1502:

的最佳重载方法匹配
  

'System.Windows.DependencyObject.OnPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)'   有一些无效的论点

     

错误CS1503:参数'1':无法从'string'转换为   'System.Windows.DependencyPropertyChangedEventArgs'

这是一些代码

C#代码

 private bool _isLogOn;

        public  bool IjmFinished
        {
            get 
            {
               // return _fl.ProcessFinished;

                return _isLogOn;
            }
            set 
            {
                _isLogOn = value;
               OnPropertyChanged("IjmFinished");
            }
        }

xaml

 <Label Margin="120,0,0,82" Height="30" VerticalAlignment="Bottom" Content="{Binding Path = IjmFinished, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource IjmFinishedStatusConverter}}"  HorizontalAlignment="Left" Width="80" />  

如果我取消注释OnPropertyChanged("IjmFinished");它可以编译。我想知道我哪里做错了,我该怎么改呢?谢谢。

1 个答案:

答案 0 :(得分:3)

看起来你正在调用类中的一个方法来处理依赖属性更改。相反,您需要提升INotifyPropertyChanged.PropertyChanged事件:

PropertyChanged(this, new PropertyChangedEventArgs("ImFinished"));

请注意,通常您将在基本视图模型类中为此编写一个辅助方法,如下所示:

protected void RaisePropertyChanged(string propertyName)
{
    var evt = PropertyChanged;   // create local copy in case the reference is replaced
    if (evt != null)             // check if there are any subscribers
        evt (this, new PropertyChangedEventArgs(propertyName));
}

这样您就可以使用RaisePropertyChanged("ImFinished")


最后一点说明:C#版本5有一个新属性CallerMemberName,允许RaisePropertyChanged方法获取调用属性的名称:

protected void RaisePropertyChanged([CallerMemberName]string propertyName = null)
{
    var evt = PropertyChanged;   // create local copy in case the reference is replaced
    if (evt != null)             // check if there are any subscribers
        evt (this, new PropertyChangedEventArgs(propertyName));
}

这使您无需使用魔术字符串来指定属性名称 - 只需从属性设置器中调用RaisePropertyChanged()