gpt4 book ai didi

c# - 使用 INotifyPropertyChanged

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:38 24 4
gpt4 key购买 nike

有人能解释一下为什么在 wpf 中使用绑定(bind)时需要使用 INotifyPropertyChanged 的​​实现吗?我可以在不实现此接口(interface)的情况下绑定(bind)属性吗?例如我有代码

public class StudentData : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;
#endregion

void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}

string _firstName = null;
public string StudentFirstName
{
get
{
return _firstName;
}
set
{
_firstName = value;

OnPropertyChanged("StudentFirstName");
}
}
}

并在 .xaml 中绑定(bind)

<TextBox Text="{Binding Path=StudentFirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Grid.Row="1"
Grid.Column="2"
VerticalAlignment="Center" />

这段代码来自 .xaml.cs

StudentData _studentData = new StudentData { StudentFirstName = "John", StudentGradePointAverage = 3.5};

public MainWindow()
{
InitializeComponent();

this.DataContext = _studentData;
}

为什么我们需要在这种情况下使用 INotifyPropertyChanged?这不是我的代码。

最佳答案

如果您希望 wpf 表单在通过代码更改属性时自动更新,则需要 INotifyPropertyChanged。此外,某些 Controller 可能想知道是否进行了编辑以启用/禁用保存按钮等。您也可能在不同的 View 上显示相同的属性;在这种情况下,INotifyPropertyChanged 有助于在您编辑属性时立即更新另一个 View 。

如果您认为您的表单在没有 INotifyPropertyChanged 的情况下表现良好,那么您可以放弃它。

请注意,即使没有 INotifyPropertyChanged,绑定(bind)也能正常工作。请参阅:Why does the binding update without implementing INotifyPropertyChanged?


我会像这样实现属性。在极少数情况下,它可以帮助避免无休止的循环更新。顺便说一句,它更有效率。

 private string _firstName;
public string StudentFirstName
{
get { return _firstName; }
set
{
if (value != _firstName) {
_firstName = value;
OnPropertyChanged("StudentFirstName");
}
}
}

从 C#6.0 (VS 2015) 开始,您可以像这样实现 OnPropertyChanged:

private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

关于c# - 使用 INotifyPropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33641182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com