0

我对非常复杂的 UI 有以下要求。(这里的复杂意味着表单中有很多控件 [大约 100])。我正在使用MVVM(如果我的问题需要它稍微远离 MVVM,我可以接受)

我的问题是Editable ComboBoxTextBox。但我想说我喜欢听一个适合所有控件的通用算法。

要求1:用户编辑内容并转到下一个控件,控件/文本的颜色应变为红色。

要求 2:当用户回到之前编辑的控件并输入最初存在的值时,控件/文本的颜色应该变回黑色。

我知道这个要求很严格,我一直在努力设计一个通用算法,使用它我可以存储以前的值并调用一个函数来更改控件的颜色。

为了给大家一个想法,
--> 我尝试为每个 TextBox 存储 2 个属性,例如 Default_Text 和 Text。但由于属性数量巨大,内存占用非常巨大。保持这么多属性也非常困难。
--> 我尝试向每个 ViewModel 添加一个字典来存储已更改的值。但在这里我面临的问题是为我的应用程序中的所有控件提供唯一键,这不是很有帮助
-->我什至考虑过并尝试将控件子类化,如 TextBox、ComboBox 并覆盖一些方法以满足我的要求,但遗憾的是当我开始添加验证和所有内容时,我失败了。

所以在这里我坚持设计一个通用的 WPF 属性系统/算法来处理所有撤消重做功能、更改控件样式等!!!

如果您的专家能够指导我正确的方向并帮助我开发这样的算法/系统,那将是非常棒的。一个示例插图会很好!

4

2 回答 2

1

我找到了上述问题的答案。我为此使用了附加行为。有关此链接的更多详细信息,来自 StackOverFlow的 XAML 中的函数调用。

当我进行数据绑定时,我使用 Binding=OneWay 将 DataBound 变量的初始值存储在 Tag 属性中。然后我为 LostFocus 事件编写了附加行为。

每当用户输入一个控件然后转到另一个控件时,它就会触发 LostFocus 事件并调用我附加的行为。在此,我检查该值是否等于 Tag 中的值。如果相同,则显示为黑色,否则显示为红色。

WPF 中的附加行为摇滚。我可以干净利落地实现任何目标,而不会造成代码混乱!!!!

于 2010-10-11T18:23:35.557 回答
1

另一种选择是在模型(或视图模型)中使用一些“脏”跟踪并绑定到属性 isdirty(并将其转换为颜色)。

于 2012-01-29T07:50:53.533 回答