我们希望创建一个可以快速轻松地“重新设置皮肤”的应用程序,并尽可能提高灵活性。通常,这是通过在资源字典中交换模板和样式来实现的。
WPF中的自定义控件旨在“看起来很”。所有逻辑都在代码中,字典中的控件模板用于将外观与控件相关联。
MVVM和自定义控件之间存在很多重叠。许多开发人员说MVVM胜过自定义控件。两者都可以被视为将逻辑移出视图并进入另一个代码文件的方法。我认为如果VM包含域相关逻辑,而自定义控件包含特定于视图的逻辑,则两者之间可能存在语义差异。
将相关视图XAML移动到可以换出的资源字典中的最佳方法是什么?我应该在字典中使用直接数据模板(不是我喜欢的方法,因为视图很复杂)?我应该创建一个自定义控件来替换视图并为其定义控件模板(导致控件和VM之间的代码重复)?我应该将UserControl用于视图并隔离这些控件的XAML,以便可以将这些文件与资源字典交换出来吗?
你会如何处理这个问题?有什么建议?
谢谢!
答案 0 :(得分:2)
我个人喜欢使用 using an IValueConverter
like this post.
这基本上要求你:
IValueConverter
。这为您提供了您认为应用程序所需的灵活性。上面的帖子使用约定优于配置查找策略,但您可以轻松地将其交换为依赖于您可以注册/解析对象的服务的转换器,如下所示:
public static class ServiceProvider
{
public void Register<TView>(Type ViewModelType);
public void Register(IDictionary<Type,Type> ViewLookup);
public object Resolve(object ViewModel);
}
HTH