मेरे विचार में, मेरे पास एक बटन है।मैं DelegateCommand के साथ व्यू टू व्यू मॉडेल से जानकारी कैसे पास करूं?
जब उपयोगकर्ता इस बटन पर क्लिक करता है, तो मैं ViewModel डेटाबेस में टेक्स्टब्लॉक के संदर्भ को सहेजना चाहता हूं।
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top">
<TextBlock Text="{Binding FirstName}"/>
<TextBox Text="Save this text to the database."/>
<Button Content="Save" Command="{Binding SaveCommand}"/>
</StackPanel>
लेकिन, मेरा ViewModel, "सहेजें()" में मेरे 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
मैंने वास्तव में टेक्स्टबॉक्स को एक व्यूमोडेल प्रॉपर्टी (INotifyPropertyChanged) पर बाध्य करके मेरी समस्या हल की है, निश्चित रूप से सेव() कमांड का उपयोग करने के लिए मूल्य है, लेकिन आपके सुझाव बहुत रोचक हैं, उन्हें जांच लेंगे। –
एक विशिष्ट (और उचित रूप से आम) उपयोग केस है जहां मैट का समाधान निश्चित रूप से एक अलग बाध्य मान तक पहुंचने पर जीतता है: 'आइटम नियंत्रण' के भीतर से निष्पादित आदेश। यहां, एक बटन, कहें, 'ListView' में' 'DataContext' को पैरामीटर के रूप में उपयोग कर सकता है और जिस आइटम पर बटन क्लिक किया गया था उसे कमांड के साथ पास किया गया है। यह काम करना मुश्किल है कि किस बटन ने बटन को अन्यथा क्लिक किया था। –
ध्यान दें कि सामान्य 'प्रतिनिधिमंडल' का एक महत्वपूर्ण प्रतिबंध है (जिसे रन टाइम तक नहीं उठाया जाता है - संकलक शिकायत नहीं करेगा): आप पैरामीटर के रूप में मान प्रकार का उपयोग नहीं कर सकते हैं। आधिकारिक सलाह एक शून्य मूल्य प्रकार (जिसे अनुमति है) का उपयोग करना है और उपयोग से पहले जांचें कि इसमें एक मान है (https://msdn.microsoft.com/en-us/library/gg431410%28v=pandp.50%29 .aspx - "टिप्पणियां" अनुभाग देखें)। –