【问题标题】:MVVM Connected BooleansMVVM 连接布尔值
【发布时间】:2019-11-22 11:41:49
【问题描述】:

我确定这是一个愚蠢的问题,但我现在无法弄清楚。

假设我有一个具有 3 个布尔属性的视图模型,它们以某种方式连接。因此,如果我设置 bool1 = true,则 bool2/3 设置为 false。如果我将 bool2 设置为 false,则会发生不相关的事情,如果我将 bool3 设置为 true,则 bool1 会设置为 true。

我只是随机输入的,假设没有stackoverflow异常。

我的问题是,如果 bool2 onChange 代码被其他布尔值设置,我该如何阻止它触发? 它们都相互链接,我无法只触发“bool 2 = false”,而在 setter 或 onChangeHandler 触发中也没有任何逻辑。

现在我通过在我的视图模型“AllowChangeFiring”中创建另一个标志并像这样包装我的所有逻辑来解决这个问题。

if(AllowChangeFiring){
  AllowChangeFiring = false;
  bool 2 = false;
  ...
}
AllowChangeFiring = true;

但这不能是处理这种情况的方法吗?我一定遗漏了一些明显的东西吧?

【问题讨论】:

标签: c# mvvm


【解决方案1】:

我认为如果您不使用属性的设置器,而是使用属性背后的私有变量,那么您想要实现的目标是可能的。这样就不会产生任何副作用了。

private bool _b1;
public bool B1
{
 get
  {
  return _b1;
  }
set
 {
  _b1 = value;
  if(value)
  {
   _b2 = false;
   _b3 = false;
  }
 }
}

private bool _b2;
public bool B2
 {
 get
  {
  return _b2;
  }
 set
  {
  _b2 = value;
  if(!value)
   {
   SomethingUnrelated();
   }
  }
 }

private bool _b3;
public bool B3
 {
 get
  {
  return _b3;
  }
 set
  {
  _b3 = value;
  if(value)
   {
   _b1 = true;
   }
 }
}

【讨论】:

  • 嗯,可以。我使用了一个不需要私有变量的 mvvm 框架,所以我有点忘了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 2015-09-04
  • 2014-01-06
  • 2018-10-13
  • 2017-04-08
相关资源
最近更新 更多