2013-02-04 28 views
1

我是WPF的新手,我正在編寫一個簡單的測試應用程序來熟悉它。我的測試應用程序將檢測到所有連接到我的電腦的遊戲杆,並顯示關於它的信息。到目前爲止,我有這個視圖模型:我應該如何填充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的代碼隱藏中嗎?或者其他地方?最終的目標是不僅有這個集合填充,而且定期更新,以反映當前的狀態(用戶新的操縱桿插入,拔出現有的,等等)。

回答

1

的主窗口後面的代碼是明確不應該在哪裏出現「業務」邏輯的地方,作爲視圖應該保持儘可能簡單。

讓你獲取/更新邏輯視圖模型的裏面,這樣你可以很容易地和獨立測試。

從學習的角度來看,保持分離的關注是非常重要的:

  • 查看被綁定到視圖模型,並且沒有情報
  • 視圖模型對如何獲得型號
  • 知識模型表示數據

就你而言,虛擬機的知識是在它的構造函數內調用的。稍後你可以改變它來調用一些IJoystickDataService接口,並使用MVVM框架來連接所有的東西。

0

我會對你的操縱桿可觀察到的集合屬性(和填充它的代碼)在模型類。 viewmodel只是將這個相同的屬性暴露給視圖進行綁定。虛擬機應儘可能薄 - 理想只是暴露了在該模型的結合,而不是做任何形式的「業務」邏輯的(即填充操縱桿信息在你的情況下)的屬性。