2010-08-04 57 views
1

我有一個窗口,其中有3個文本框在網格中 - 這是我的視圖 - 我有保存按鈕來添加一個新用戶到我的用戶列表與文本框中的數據。 我想在我的viewmodel類上使用中繼命令來做到這一點,但我對如何製作綁定感到困惑。我希望這很清楚。任何想法或例子都會有所幫助。 在此先感謝。綁定一個保存命令WPF

回答

2

你應該有一個視圖模型類似如下:

class UserViewModel 
{ 
    public String Name { get; set; } 
    public String Password { get; set; } 
    public String Email { get; set; } 

    public RelayCommand AddUserCommand { get; set; } 

    public UserViewModel() 
    { 
     AddUserCommand = new RelayCommand(AddUser); 
    } 

    void AddUser(object parameter) 
    { 
     // Code to add user here. 
    } 
} 

而且你可以使用它像以下:

<StackPanel> 
     <TextBox Text="{Binding Name}"></TextBox> 
     <TextBox Text="{Binding Password}"></TextBox> 
     <TextBox Text="{Binding Email}"></TextBox> 
     <Button Command="{Binding AddUserCommand}">Add</Button> 
    </StackPanel> 

爲了使這項工作,把按照你的用戶控件代碼/控制/窗戶的構造函數:

DataContext = new UserViewModel(); 
+0

這些代碼是否足以提供視圖和視圖模型之間的關係?它仍然不起作用... – cemregoksu 2010-08-04 10:10:08

+0

您必須創建ViewModel的對象並將其分配給窗口的DataContext – Zied 2010-08-04 11:37:43

+0

感謝Zied爲此添加了這一點。我已經更新了代碼。 – decyclone 2010-08-04 14:18:13

0

我推測你讀了Josh Smith的文章: WPF Apps With The Model-View-ViewModel Design Pattern。如果你沒有,那麼先閱讀它,然後下載代碼,因爲示例與你的問題非常相似。

+0

是的,我讀了它,它讓我感到困惑,比幫助我... – cemregoksu 2010-08-04 10:22:15

+0

我明白你:)。到過那裏。三讀和學習代碼後,我得到了部分內容。需要時間來捕捉正在發生的事情。至少我需要。 – zendar 2010-08-04 10:57:39

0

您是否創建了ViewModel的實例並將此實例放入您的視圖或stackpanel的DataContext中?

例如:

 
UserViewModel viewModel = new UserViewModel(); 
UserWindow view = new UserWindow(); 
view.DataContext = viewModel; 
view.Show(); 

上有視圖和視圖模型耦合的幾個選項:

  • 創建視圖和視圖模型和視圖模型設置爲DataContext屬性(代碼以上)
  • 在視圖的構造函數中創建ViewModel並使用它填充DataContext屬性
  • 在typ視圖中創建資源然後在XAML中填充DataContext屬性

我更喜歡第一個選項,因爲您可以在運行時隨心所欲地組合視圖和視圖模型。

希望這是一個有用的答案。