gpt4 book ai didi

c# - 当另一个属性更改时更新几个属性?

转载 作者:行者123 更新时间:2023-12-03 10:16:04 24 4
gpt4 key购买 nike

在我的模型类中,我有几个列表和其他属性。这些属性之一称为 CurrentIteration并不断更新。当它被更新时,我希望其他属性将自己更新为相应列表的元素,即 CurrentIteration 的索引.我认为我需要包含的只是 OnPropertyChanged我想在 CurrentIteration 的 setter 中更新的属性的事件.但是,他们似乎没有被调用。

public class VehicleModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

private List<double> _nowTime = new List<double>();
public List<double> NowTime
{
get { return this._nowTime; }
set { this._nowTime = value; OnPropertyChanged("Nowtime"); }
}

private List<double> _VehLat = new List<double>();
public List<double> VehLat
{
get { return this._VehLat; }
set { this._VehLat = value; OnPropertyChanged("VehLat"); }
}

private List<double> _VehLong = new List<double>();
public List<double> VehLong
{
get { return _VehLong; }
set { _VehLong = value; OnPropertyChanged("VehLong"); }
}

//non-list properties
private int _currentIteration;
public int CurrentIteration //used to hold current index of the list of data fields
{
get { return _currentIteration; }
set
{
_currentIteration = value;
OnPropertyChanged("CurrentIteration");
OnPropertyChanged("CurrentVehLat");
OnPropertyChanged("CurrentVehLong");
}
}

private double _currentVehLat;
public double CurrentVehLat
{
get { return _currentVehLat; }
set { _currentVehLat = VehLat[CurrentIteration]; OnPropertyChanged("CurrentVehLat"); }
}

private double _currentVehLong;
public double CurrentVehLong
{
get { return _currentVehLong; }
set { _currentVehLong = VehLong[CurrentIteration]; OnPropertyChanged("CurrentVehLong"); }
}

public void SetData(int i)
{
CurrentIteration = i;
}

// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
CurrentIteration确实得到了正确更新,但其余的没有。二传手被完全跳过。我几乎可以肯定这很简单,在这种情况下我对二传手的理解是错误的,但我不确定它到底是什么。

编辑:这是 XAML 中的绑定(bind)之一的示例:
Text="{Binding Path=CurrentVehLong,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"

最佳答案

提高属性更改通知只是说“这些属性已更改,重新查询它们的值”。这意味着它调用 get访问器方法。

看起来您希望它调用 set方法,这不会发生,因为您没有设置值。

尝试删除支持属性并直接访问数组值,如下所示:

public double CurrentVehLong
{
get { return VehLong[CurrentIteration];; }
set
{
VehLong[CurrentIteration] = value;
OnPropertyChanged("CurrentVehLong");
}
}

现在当您调用 OnPropertyChanged("CurrentVehLong") ,它将重新查询 get此属性的访问器,并根据 CurrentIteration 更新值.我还修改了 set方法,所以它会更有意义,如果这是你想在其他地方做的,你可以使用它来设置值。

关于c# - 当另一个属性更改时更新几个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41045964/

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