1

我是 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();
    }
}

我的 XAML 用于MainWindow

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

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

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

4

2 回答 2

2

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

将获取/更新逻辑保留在视图模型中,这样您就可以轻松独立地对其进行测试。

从学习的角度来看,将关注点分开很重要:

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

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

于 2013-02-04T10:52:07.857 回答
0

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

于 2013-02-04T10:57:42.627 回答