几年后,只需启动MVVM光源的新项目。我使用ViewModelLocator连接我的第一个VM,我发现对于每个新的视图模型,我们需要创建一个新属性。我只是想知道如何避免这种情况,因为应用程序最终可能会有很多视图模型(50+)。我已经使用值转换器工作,但后来我在XAML编辑器中失去了智能。
对于可能有解决方案的人的任何例子表示赞赏。
注意 - 这是一个使用值转换器的解决方案,因此我可以将参数传递到某个IoC并获取VM,但随后我松开了intellisense(WelcomeTitle得到了波形)。
<Window x:Class="My.MainWindow"
DataContext="{Binding Source={StaticResource Locator},
Converter={StaticResource Locator}, ConverterParameter='foo'}">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skins/MainSkin.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<TextBlock FontSize="36"
FontWeight="Bold"
Foreground="Purple"
Text="{Binding WelcomeTitle}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
TextWrapping="Wrap" />
</Grid>
</Window>
更新: 这是另一种方法,比使用转换器更好,但仍然受到WelcomeTitle波形的影响,因为XAML编辑器不知道类型。我想知道这种影响和#34;可混合性&#34 ;? (我没有混合方便。)
http://maartendewilde.blogspot.com/2011/01/auto-viewmodel-binding-with-ninject.html
由于
答案 0 :(得分:1)
对于intellisense,您可以尝试更多资源上的样板吗?
/// <summary>
/// Class to contain things
/// </summary>
/// <typeparam name="T">UserID</typeparam>
/// <typeparam name="TK">UserName</typeparam>
public class MyDictionary<T,TK> : Dictionary<T,TK>
或者使用共享资源字典使intellisense满意呢?
依赖注入是减少冗余定位器代码的好方法。它涉及注册服务或模型提供者的通用方法。 From the MSDN.
如果必须为每个视图模型创建新属性,则可能表示实际模型存在缺陷。在使用VM时,我通常会发现它们是还原性的,因为模型包含所有相关数据,并且视图模型被构造为对该视图重要的属性的子集。
大型项目拥有50多个视图模型并不罕见。