2009-07-25 72 views
3

我有一個使用MVVM的WPF應用程序。我有一些用戶控件應該在使用簡單數據綁定的3個文本框控件中顯示人名,姓氏和電子郵件。在MVVM中爲WPF實現一個簡單的主 - 從情景

用戶控件有一個簡單的組合框,用戶選擇用戶的ID,因此帶有該ID的人員記錄應該被加載(從數據庫中獲取其數據),然後名字,姓氏和電子郵件將顯示在文本框。

我有三個屬性,一個ViewModel類和三個屬性(名字,姓氏和電子郵件)的三個屬性,一個Model類(人類)ID和3文本框的用戶控件。

使用MVVM(最好)實現這種行爲最簡單的方法是什麼?任何樣品?

+0

我想你需要澄清你的問題多一點,你說您使用MVVM,那麼您在樣本中面臨的限制是什麼? – 2009-07-26 00:24:20

回答

5

我在這裏猜測,因爲你的問題有點模糊,你不太清楚如何將這些碎片鉤在一起。爲了簡單起見,讓我們直接將ViewModel掛接到用戶控件並將其全部綁定。

只要您的視圖模型中填充了正確的人員集合,下面的所有綁定都將處理數據並顯示正確的數據。記下組合框中所選項目的雙向綁定。這允許WPF將新選擇的項目發送回視圖模型。

在用戶控件的代碼背後:

public MyUserControl() 
{ 
    DataContext = new MyViewModel(); 
} 

在用戶控件的XAML:

<ComboBox ItemsSource="{Binding AllPeople}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" /> 
<TextBox Text="{Binding SelectedItem.LastName}" /> 
<TextBox Text="{Binding SelectedItem.FirstName}" /> 
<TextBox Text="{Binding SelectedItem.EmailName}" /> 

您的視圖模型:

private IEnumerable<Person> _allPeople; 
    public IEnumerable<Person> AllPeople 
    { 
     get { return _allPeople; } 
     set 
     { 
      if (_allPeople != value) 
      { 
       _allPeople = value; 
       NotifyPropertyChanged("AllPeople"); 
      } 
     } 
    } 

    private Person _selectedItem; 
    public Person SelectedItem 
    { 
     get { return _selectedItem; } 
     set 
     { 
      if (!_selectedItem != value) 
      { 
       _selectedItem = value; 
       NotifyPropertyChanged("SelectedItem"); 
      } 
     } 
    } 

    private void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName); 
     } 
    } 
} 

public class Person 
{ 
public int PersonId { get; set; } 
public string FirstName { get; set; } 
public string LastName { get; set; } 
public string Email { get; set; } 
} 
+0

此代碼顯示正確的解決方案,但不會進行編譯,因爲它可互換地使用SelectedPerson和SelectedItem。爲了清楚起見,該屬性應該改爲SelectedPerson。 – MrSlippers 2011-12-21 17:40:04