MAUI 防止两个属性相互依赖的死锁

问题描述 投票:0回答:1

如何基于彼此更改两个可观察属性,但防止死锁?

为了这个例子,我保持非常简单:
我正在数两件事,(1)物品和(2)这些物品的容器。每个容器可容纳 3 件物品。用户可以更改物品的数量和容器的数量。更改其中一个会自动更改另一个。

可以想象,这会导致完全僵局。然而当一个人改变了。我还需要更改另一个属性,并且当一个或另一个属性更改时,我需要使用新数字更新视图。

显示值:

<Entry Text="{Binding Amount}"/>
<Entry Text="{Binding Sections"/>

设定值:

private int amount;
public int Amount
{
    get => amount;
    set
    {
        SetProperty(ref amount, value);
        Sections = Convert.ToInt32(Math.Round(Amount / 3));
    }
}

private int sections;
public int Sections
{
    get => sections;
    set
    {
        SetProperty(ref sections, value);
        Amount = Sections * 3;
    }
}

如何防止死锁,例如仅在用户调用时更改属性一次?

c# maui deadlock
1个回答
0
投票

创建两个方法来更新属性

void SetAmount(int amount)
{
  this.Amount = amount;
  Sections = Convert.ToInt32(Math.Round(Amount / 3));
}

void SetSections(int sections)
{
  this.Sections = sections;
  Amount = Sections * 3;
}

这样属性设置器就不会递归地互相调用

© www.soinside.com 2019 - 2024. All rights reserved.