我有一个不断更新的bool值,并且INotifyPropertyChanged事件未正确触发。它到达IF部分并跳过,因为它看到传递了null。我确实在类顶部添加了System.ComponentModel
第一部分:
public class ToolTipInortfyPropertyChange : INotifyPropertyChanged
{
private bool form15TooltipShow;
public bool Form15TooltipShow
{
get { return form15TooltipShow; }
set
{
form15TooltipShow = value;
OnPropertyChanged("Form15TooltipShow");
}
}
然后是第二部分,都属于同一类
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
当我进入代码时,它进入“设置”部分,然后跳转到OnPropertyChanged并跳过if,这样我的视图就不会因需要布尔值的另一个事件而更新
Tx
答案 0 :(得分:4)
对于c#中的每个事件,都是这种情况,如果没有人订阅该事件,则它将为null
。在这种情况下,似乎没有人订阅PropertyChanged
事件。
PS::我建议将[CallerMemberName]
属性放在OnPropertyChanged
方法中,这样就不必每次都手动传递名称。像这样:
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
请注意我是如何使方法protected
而不是公开的,我们不仅希望有人能够提出该事件
编辑:这是完整的OnPrertyChanged
方法:
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
答案 1 :(得分:0)
浏览代码时,我可以看到
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
执行并且该值不再为null,因此必须收集一个“侦听器”。但是视图不会更新。该复选框位于一个窗体上,将从该复选框接收事件的控件位于另一窗体上。它几乎就像2个对象一样被创建,并且它们不能互相交谈,因为它们是2个不同的实体。在表1上创建类型为person的新对象时是否可能,而在表2上创建相同的对象?
我创建了一个全新的项目,并使其尽可能简单。在form1上的文本框和在form 2上的文本框,并尝试在这两个窗体之间传递文本。线
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
执行时不带任何Null值,但视图不会更新。
这是XAML
<TextBox Text="{Binding Path=CheckBoxState ,Mode=TwoWay}"></TextBox>
并且我尝试了各种不同的选项,例如ASYNC等。结果始终是相同的。我什至从表单中删除了后面的代码,并在XAML上进行了绑定
<Window.Resources>
<local:CheckBoxClass x:Key="CheckBoxFinder" />
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource CheckBoxFinder}}">
我认为这很好用,因为在我键入PATH =后自动出现了智能 然后会弹出列出的唯一属性。
任何建议将不胜感激。 tx
好吧,只使用了完全相同的代码,只是向form1添加了另一个文本框。所以form1有2个文本框。我完全像以前一样约束它们,唯一的区别是发送和接收的控件使用相同的形式。猜猜是什么...有效。
当2个表单需要传递数据时会出现问题。就像创建了两个对象,它们无法通信。我敢肯定,这是所有经验丰富的人/女孩的常识。但是,如何在这些形式之间使用一个对象,以便它们进行同步?希望我以前知道这个可以更简洁地提出我的问题