gpt4 book ai didi

c# - 更新属性和乒乓球事件

转载 作者:行者123 更新时间:2023-12-03 10:58:15 25 4
gpt4 key购买 nike

在将Catel用于MVVM Framework的WPF应用程序中,我在 View 模型中拥有3个不同的属性

    public double? QtaDiv1 { get; set; }

public double? Exchange{ get; set; }

public double? QtaDiv2 { get; set; }

我已经将OnPropertyChanged覆盖为
protected async override void OnPropertyChanged(AdvancedPropertyChangedEventArgs e)
{
if (e.PropertyName == "Data")
{
await GetValueDate(e);
}
else if (e.PropertyName == "QtaDiv1" || e.PropertyName == "Exchange")
{
ChangeQtaDiv2(QtaDiv1, Exchange);
}
if (e.PropertyName == "QtaDiv2")
{
ChangeQtaDiv1(QtaDiv2, Exchange);
}
else if (e.PropertyName == "SelectedCross")
{
await GetValueDate(e);
CheckForSplitVisibility();
}

base.OnPropertyChanged(e);
}

我要做的是如果我计算QtaDiv2的QtaDiv1和Exchangehave值
否则,如果用户(和Exchange)更改了QtaDiv2,我将更新QtaDiv1。

在我更新QtaDiv2之前,此方法可以正常工作,因为此时我在QtaDiv1上获得了PropertyChanged,该属性调用了QtaDiv2上的更新,依此类推...

我怎样才能打破这个咒语???我曾想过要设置一个字符串字段来保存变化的值,但是如果这样做,我必须禁止RaisePropertyChanged通知(并且我必须转换为后备字段属性),因此我不会获得对它们的验证

谢谢

最佳答案

您只需要添加一个简单的bool变量即可表明更改是否来自代码内部:

private bool isInternalChange = false;

如果是内部更改,则可以忽略它:
if (!isInternalChange)
{
if (e.PropertyName == "Data")
{
await GetValueDate(e);
}
else if (e.PropertyName == "QtaDiv1" || e.PropertyName == "Exchange")
{
isInternalChange = true;
ChangeQtaDiv2(QtaDiv1, Exchange);
isInternalChange = false;
}
if (e.PropertyName == "QtaDiv2")
{
isInternalChange = true;
ChangeQtaDiv1(QtaDiv2, Exchange);
isInternalChange = false;
}
else if (e.PropertyName == "SelectedCross")
{
await GetValueDate(e);
CheckForSplitVisibility();
}

base.OnPropertyChanged(e);
}

关于c# - 更新属性和乒乓球事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31209704/

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