我在寻找设置数据上下文属性的最佳方法。我发现了三种方法:
在视图上分配数据上下文(XAML或代码后台)。
通过构造函数在ViewModel上分配数据上下文。
使用一些配置,通过一些基础结构类在运行时获取视图和ViewModel的引用并绑定数据上下文。
从松耦合、可维护性方面来看,哪种选项最好?或者有没有最佳方法?
我个人比较喜欢 这种方法,因为它让我写的代码更少 :). 这种方法基本上使用了一个 IValueConverter
来查找每个 WPF 控件需要如何视觉呈现 ViewModel
,并且 IValueConverter
会自动设置数据上下文。此外,它还展示了如何创建一个数据模板,让你可以要求 WPF 默认使用这个转换器,像这样:
<DataTemplate DataType="{x:Type ViewModels:ViewModelBase}">
<ContentControl Content="{Binding Converter={StaticResource MyConverter}}"/>
</DataTemplate>
第四种方法是使用DataTemplate。
我认为最好的方法是选择在当前情况下最适合的那个方法。
如果我的视图模型是动态场景,我会使用DataTemplate/ContentPresenter,或者如果是视图优先,我会采取您提到的方式一,等等...