2

经过几年的中断,刚刚开始使用 MVVM light 的新项目。我正在使用 ViewModelLocator 连接我的第一个 VM,我发现对于每个新视图模型,我们都需要创建一个新属性。我只是想知道如何避免这种情况,因为该应用程序最终可能会有很多视图模型(50+)。我已经使用值转换器让它工作,但后来我在 XAML 编辑器中失去了智能。

感谢那些可能对此有解决方案的人的任何示例。

注意 - 这是一个使用值转换器的解决方案,因此我可以将参数传递到一些 IoC 并获取 VM,但随后我失去了智能感知(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 编辑器不知道类型。我想知道这是否会影响“可混合性”?(我手边没有混合。)

http://maartendewilde.blogspot.com/2011/01/auto-viewmodel-binding-with-ninject.html

谢谢

4

1 回答 1

1

对于智能感知,您可以在资源上尝试更多样板文件吗?

/// <summary>
/// Class to contain things
/// </summary>
/// <typeparam name="T">UserID</typeparam>
/// <typeparam name="TK">UserName</typeparam>
public class MyDictionary<T,TK> : Dictionary<T,TK>

或者如何使用共享资源字典让智能感知快乐?

依赖注入是减少冗余定位器代码的好方法。它涉及注册服务或模型提供者的通用方式。来自 MSDN。

如果您必须为每个视图模型创建一个新属性,则可能表明您的实际模型存在弱点。在使用 VM 时,我通常发现它们是简化的,因为模型包含所有相关数据,并且视图模型被构建为对该视图重要的属性的子集。

大型项目拥有 50 多个视图模型并不少见。

于 2013-06-21T18:36:35.803 回答