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

标签 c# wpf mvvm catel

在将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/

相关文章:

c# - UriTypeConverter 无法从 (null) 转换

c# - 如何添加默认组合框 "--Select user--"

design-patterns - MVPVM-在模型和 View 模型中枚举使用

c# - 如何在 .Net Core 项目中使用 WcfCoreMtomEncoder?

c# - 将一个 View 数据上下文绑定(bind)到主窗口数据上下文

c# - C#SqlDataReader引发语法错误,但是命令在SQL Server中运行正常?

c# - 从 View 到 ViewModel 的 WPF 事件绑定(bind)?

c# - 窗口调整大小处理事件

c# - 实时数据聚合的设计建议?

c# - asp.net 文字不显示 <br><hr>