WPF控制 – 是否应该不惜一切代价避免代码?

我有一个WPF项目,需要创建一个特定于域的控件,但将在多个视图中重用。

控件必须以3个部分显示小数值,整数部分和小数部分分成2个不同的字体大小。 我有一个Amount的依赖属性,然后在后面的代码中分成3个部分的数量,所以我可以在特定的标签中显示它们。 我还使用小数量来决定金额是上升还是下降,然后更改控件的背景颜色。 所有这些都是在后面的代码中完成的。 我知道有人说背后的代码是邪恶的,我在大多数情况下都同意。 但是你会如何实现呢?

不,不应该不惜一切代价避免。

请记住, 数据是数据,UI是UI

例如,如果你的代码只包含 UI内容,那么代码背后就没有错。

在代码隐藏中通常应该避免使用任何与实际数据一起工作的东西,包括使用ViewModel ,因为您将创建依赖项,这会破坏 MVVM设计模式。

因此,为了更直接地回答您的问题,您所做的事情没有任何问题。

编辑

让我进一步解释。

想象一下场景,你有一个View,有一个按钮,点击它后需要启动一个Storyboard 。 (当然,你只能在XAML中这样做,但这只是一个例子)

在这种情况下,将click事件添加到按钮并从代码隐藏启动故事板没有任何问题。 这是仅限UI的代码,因此它是安全的。

但是,假设您的按钮需要在单击时更改ViewModel中的属性。 你不应该在代码隐藏中掌握DataContext 。 您需要使用Command因为您需要将ViewViewModel分开。

有一种耻辱,如果你的观点有代码隐藏,那么你应该被拿回来并在头脑后面执行风格。 这是不真实的。

总而言之,MVVM是一种模式 ,而不是法律。

您可以在ViewModel中保留一个属性数量,并使用带有3个参数的转换器来提取显示的三个信息之一,而不是在代码隐藏中将数量分配为3。 所以你可以有这样的3个绑定:

 "{Binding Amount, Mode=TwoWay, Converter={StaticResource AmountSplitterConverter},ConverterParameter=Integral}" "{Binding Amount, Mode=TwoWay, Converter={StaticResource AmountSplitterConverter},ConverterParameter=Decimal1}" "{Binding Amount, Mode=TwoWay, Converter={StaticResource AmountSplitterConverter},ConverterParameter=Decimal2}" 

如果您在实施它时需要任何进一步的帮助或者不清楚,请告诉我。