gpt4 book ai didi

c# - MVVM检测子类的属性变化

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:18 26 4
gpt4 key购买 nike

我正在使用 SimpleMVVM 并有两个单独的类(模型),一个使用第二个,如下所示:

    public class Database : ModelBase<Database>
{
public String ServerName //{ get; set; }
{
get { return _ServerName; }
set
{
if (_ServerName != value)
{
_ServerName = value;
NotifyPropertyChanged(m => m.ServerName);
}
}
}
private String _ServerName = "MyTestServer";

// other properties removed for brevity
}

public class MyConfiguration
{
/// <summary>
/// Database information
/// </summary>
public Database DatabaseInfo
{
get { return _DatabaseInfo; }
set
{
if (_DatabaseInfo != value)
{
_DatabaseInfo = value;
NotifyPropertyChanged(m => m.DatabaseInfo);
}
}

}
private Database _DatabaseInfo = new Database();
}

'ServerName' 改变时,NotifyPropertyChanged(m => m.ServerName); 命令执行但不是 NotifyPropertyChanged(m => m.DatabaseInfo );

如何让 NotifyPropertyChanged(m => m.DatabaseInfo);Database 的一个属性发生变化时触发?

最佳答案

您可以使用 PropertyChanged eventINotifyPropertyChanged 接口(interface)告诉您子属性何时更改。

在您的 MyConfiguration 类中:

public Database DatabaseInfo
{
get { return _DatabaseInfo; }
set
{
if (_DatabaseInfo != value)
{
_DatabaseInfo = value;
NotifyPropertyChanged(m => m.DatabaseInfo);
DatabaseInfo.PropertyChanged += DataBasePropertyChanged;
}
}
}

...

private void DataBasePropertyChanged(object sender, PropertyChangedEventArgs e)
{
NotifyPropertyChanged(m => m.DatabaseInfo);
}

请注意,您每次更改 DatabaseInfo 属性值时都需要附加此监听器。另外请注意,如果您只想听一个属性,那么您可以这样做:

private void DataBasePropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "ServerName") NotifyPropertyChanged(m => m.DatabaseInfo);
}

关于c# - MVVM检测子类的属性变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25268384/

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