我应该如何在WPF中填充ViewModel?

时间:2013-02-04 10:48:15

标签: wpf viewmodel

我是WPF的新手,我正在编写一个简单的测试应用程序来熟悉它。我的测试应用程序将检测我连接到计算机的所有操纵杆并显示有关它的信息。到目前为止,我有这个ViewModel:

public class JoystickViewModel
{
    public ObservableCollection<Joystick> Joysticks { get; set; }

    public JoystickViewModel()
    {
        GetAttachedJoysticks();
    }

    private void GetAttachedJoysticks()
    {
        // populate Joysticks collection by using SlimDX
    }
}

这是我MainWindow.xaml的代码隐藏:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        DataContext = new JoystickViewModel();
    }
}

我的MainWindow的XAML:

<Window ...>
    <Grid>
        <ComboBox ItemsSource="{Binding Joysticks}"
                  DisplayMemberPath="Information.ProductName"/>
    </Grid>
</Window>

我遵循了一个教程,该教程也在其构造函数中填充了ViewModel。

我的问题是,我该如何填充ViewModel?我在ViewModel构造函数中填充集合似乎有点奇怪。这个逻辑应该在MainWindow的代码隐藏中吗?或者其他地方一共?最终目标是不仅要填充此集合,还要定期更新以反映当前状态(用户插入新操纵杆,拔掉现有插件等等。)

2 个答案:

答案 0 :(得分:2)

背后的MainWindow代码绝对不是应该发生“业务”逻辑的地方,因为View应该尽可能简单。

将您的提取/更新逻辑保留在viewmodel中,这样您就可以轻松独立地进行测试。

从学习角度来看,将问题分开是很重要的:

  • View绑定到ViewModel,并且没有智能
  • ViewModel了解如何获取模型
  • 模型代表数据

在您的情况下,VM知识是在其构造函数内部调用的时刻。稍后您可以将其更改为调用一些IJoystickDataService接口,并使用MVVM框架连接所有内容。

答案 1 :(得分:0)

我会在Model类中拥有您的JoySticks可观察集合属性(以及填充它的代码)。 viewmodel只是将此相同的属性公开给视图以进行绑定。 vm应该尽可能地薄 - 理想情况下只是暴露模型中用于绑定的属性,而不是执行任何类型的“业务”逻辑(即按照您的情况填充操纵杆信息)。