在我的視圖中,我有一個按鈕。如何使用DelegateCommand將View中的信息傳遞給ViewModel?
當用戶點擊這個按鈕時,我想讓ViewModel將TextBlock的上下文保存在數據庫中。
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top">
<TextBlock Text="{Binding FirstName}"/>
<TextBox Text="Save this text to the database."/>
<Button Content="Save" Command="{Binding SaveCommand}"/>
</StackPanel>
但是,我在我的視圖模型,「保存()」 DelegateCommand方法不傳遞任何參數,所以如何從在這一點上的看法得到的數據?
#region DelegateCommand: Save
private DelegateCommand saveCommand;
public ICommand SaveCommand
{
get
{
if (saveCommand == null)
{
saveCommand = new DelegateCommand(Save, CanSave);
}
return saveCommand;
}
}
private void Save()
{
TextBox textBox = ......how do I get the value of the view's textbox from here?....
}
private bool CanSave()
{
return true;
}
#endregion
我實際上通過將TextBox綁定到ViewModel屬性(INotifyPropertyChanged)來解決我的問題,當然,Save()命令可以訪問哪個值,但是您的建議非常有趣,它將檢查它們。 – 2009-05-28 11:28:01
Matt的解決方案肯定贏得了訪問單獨的綁定值的具體(合理常見)用例:在ItemsControl中執行的命令。在這裏,一個按鈕,比如'ListView'中的按鈕可以使用它的'DataContext'作爲參數,並且按鈕被點擊的項目和命令一起被傳遞。很難計算出許多項目中的哪一個按鈕被點擊。 – 2015-05-13 10:19:30
請注意,通用的'DelegateCommand'有一個重要的限制(在運行時沒有被選中 - 編譯器不會抱怨):不能使用值類型作爲參數。官方建議是使用可以爲空的值類型(允許),並在使用之前檢查它是否包含值(https://msdn.microsoft.com/en-us/library/gg431410%28v=pandp.50%29 .aspx - 請參閱「備註」部分)。 –
2015-05-13 10:23:43