c# - 自动更新 WPF 数据网格中的计算属性
问题描述
我有一个类TestModel,它有一个FirstName 和一个LastName 属性加上一个没有setter 但只是以“Lastname,Firstname”格式返回FullName 的“计算属性”。
public class TestModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName
{
get
{
return $"{LastName}, {FirstName}";
}
}
}
我将此类的多个对象存储在 ObservableCollection 中,它是 WPF 应用程序中数据网格的 ItemsSource。当我通过 GUI 添加项目时,它们立即出现在网格中,一切都很好。
但是,例如,当我更改网格中一个特定对象的 FirstName 时,FullName 不会自动更改(实际上它确实会更改,但更改不会反映在 GUI 中)。我必须在这个类上实现 INotifyPropertyChanged 吗?如果是这样,我该怎么做?我读了一些例子,但我必须承认我无法将它们转移到我的案例中......
解决方案
是的,您需要在视图模型中实现 INotifyPropertyChanged。
例子:
public class ViewModelBase: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, e);
}
}
protected void RaisePropertyChanged(String propertyName)
{
VerifyPropertyName(propertyName);
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
}
将其添加到您的程序代码中,如下所示:
public class Testmodel : ViewModelBase
{
private string _FistName;
public string FirstName
{
get
{
return _FistName;
}
set
{
if(_FistName == value)
{
return;
}
_FistName = value;
RaisePropertyChanged("FirstName");
RaisePropertyChanged("FullName");
}
}
private string _LastName;
public string LastName
{
get
{
return _LastName;
}
set
{
if (_LastName == value)
{
return;
}
_LastName = value;
RaisePropertyChanged("LastName");
RaisePropertyChanged("FullName");
}
}
public string FullName
{
get
{
return $"{LastName}, {FirstName}";
}
}
}
如果您现在将值设置为 FirstName 或 LastName,它应该引发更新 gui 的 PropertyChanged 事件。试试看 :)
推荐阅读
- cplex - Cplex SyntaxError:语法无效
- c++ - 如何停止 Qt 类中的名称修改?
- django - 如何在 django for android 中使用 google api 客户端创建帐户/登录
- linux - SELinux 策略中定义的 __default__ 用户到 unconfined_u 的映射在哪里?
- python - AttributeError:'NoneType'对象在python中的discord.py中没有属性'strip'错误
- dart - About not being able to do pub install in Dart
- ruby-on-rails - I don't know how to set the access_token
- freemarker - know last iteration of list FTL
- c# - 经过身份验证的用户在 web api owin 中间件中丢失
- r - Combine column values in an R dataframe all at once