gpt4 book ai didi

mvvm - Xamarin 运动应用程序 - IsDirty 做什么?

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

我正在查看 Xamarin Sport 应用程序代码,并试图了解他们在其中所做的一些很酷的事情。我无法理解 IsDirty正被用于确切地。它被定义 here并实现here并在许多地方使用,例如here .

我读了一些关于和ICommandIsDirty属性,所以也许这是一种将整个模型称为脏模型的方法,但这有什么含义呢?

我也看到它被使用了here我假设这就是他们首先创建它的原因。

谢谢大家对它的洞察。

最佳答案

他们只是将其用作处理修改检测的聪明方法。考虑“保存更改”功能;在某些事情发生变化之前,您实际上并不想启用“保存”按钮,您可以关闭 IsDirty 属性来测试它。

从技术上讲,您可以通过使用基类 Hook INotifyPropertyChanged.PropertyChanged 自己处理这个问题。并维护自己的一些脏东西(可能在基类中),而不是要求它们的所有类都有 IsDirty他们可能需要也可能不需要的属性,他们已经把它变成了一个类可以实现的可选特性。例如,看看 GameResult举一个不能改变的例子,因此不能被标记为脏的。

使用这种方法,您可以最大限度地减少实现此功能所需编写的代码量。您需要做的所有派生类都是从 BaseNotify 派生的。 , 实现 IDirty , 并调用 SetPropertyChanged(...)作为设置私有(private)跟踪字段的 setter ,向任何观察者发出属性已更改的信号,并自动设置脏位。

注意:我只是做了一个有趣的观察:SetProperty 的实现扩展方法确实设置了 IsDirty标志,BaseNotify类(class)' IsDirty实现不会调用任何东西来冒泡 PropertyChanged IsDirty 的事件,这意味着对它的绑定(bind)在它更改时不会更新。我相信解决方法是让该扩展方法调用 PropertyChanged属性名称为“IsDirty”:

if(dirty != null) {
dirty.IsDirty = true;
handler.Invoke(sender, new PropertyChangedEventArgs("IsDirty"));
// Yes, I'm a bad person for hard-coding the name.
}

或者,您可以推迟发送 IsDirty 的信号。更改,直到您发出信号后原始属性已更改。我只是选择保持原来的逻辑。

关于mvvm - Xamarin 运动应用程序 - IsDirty 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37190782/

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