WPF MVVM लेने के लिए कैसे पाठ परिवर्तन बटन पर क्लिक करें

0

सवाल

मैं पर काम कर रहा हूँ एक WPF के साथ परियोजना MVVM और मैं का सामना करना पड़ा एक समस्या का नहीं उठा अंतिम पाठ में परिवर्तन जब मैं सहेजें बटन क्लिक करें.

मेरी घटक सेटअप कर रहे हैं इस तरह:

  1. एक टूलबार देख टूलबार VM है, जो बटन को बचाने के. बटन क्लिक करें घटना के लिए बाध्य है एक Icommand.
  2. एक प्रपत्र दृश्य का एक गुच्छा के साथ पाठ क्षेत्र, करने के लिए बाध्य एक sepreate VM.
  3. टूलबार दृश्य और प्रपत्र दृश्य में हैं अलग-अलग फ़ाइलों.
  4. सभी अपने वीएमएस से विरासत में मिली BindableBase (भाग चश्मे की.MvvM पैकेज)

बटन पर क्लिक करें, मैं ले जाएगा के मूल्यों रूप से वीएम और उन्हें बचाने के लिए... सरल और stragight आगे. सभी अच्छी तरह से है, सिवाय इसके कि पर संपादन पिछले क्षेत्र में क्लिक करें, सहेजें बटन के साथ ट्रिगर नहीं खो ध्यान केंद्रित घटना है । इसलिए, संपत्ति सेट इवेंट ट्रिगर नहीं है. मैं क्लिक करने के लिए होगा से दूर खेतों में, संपादन के बाद फिर बटन पर क्लिक करें. यहाँ अपने कोड:

 public class ViewModel: BindableBase
{
    private string _someText;

    public string SomeText
    {
        get { return _someText; }
        set { SetProperty(ref _someText, value); }
    }
}

में देखें XAML:

  <TextBox Text="{Binding SomeText}"/>

टूलबार में XAML:

<Button Command="{Binding SaveCommand}" ToolTip="Save">
</Button>

ViewModel के लिए उपकरण पट्टी:

 public class ToolbarViewModel : BindableBase
{
    private ICommand _saveCommand;
    public ICommand SaveCommand
    {
        get
        {
            return _saveCommand ?? (_saveCommand = new BaseCommandHandler(() => { 
                //Save code
            }, () => true));
        }
    }
}

कोड के लिए BaseCommandHandler:

 public class BaseCommandHandler : ICommand
{
    private Action _action;
    private Func<bool> _canExecute;

    /// <summary>
    /// Creates instance of the command handler
    /// </summary>
    /// <param name="action">Action to be executed by the command</param>
    /// <param name="canExecute">A bolean property to containing current permissions to execute the command</param>
    public BaseCommandHandler(Action action, Func<bool> canExecute)
    {
        _action = action;
        _canExecute = canExecute;
    }

    /// <summary>
    /// Wires CanExecuteChanged event 
    /// </summary>
    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

    /// <summary>
    /// Forcess checking if execute is allowed
    /// </summary>
    /// <param name="parameter"></param>
    /// <returns></returns>
    public bool CanExecute(object parameter)
    {
        return _canExecute.Invoke();
    }

    public void Execute(object parameter)
    {
        _action();
    }
}

क्या किसी को पता है कि एक साफ रास्ता बनाने के लिए यकीन है कि फोकस खो दिया है या एक तरह से ट्रिगर करने के लिए सेट की घटना bindable गुण

2-way-object-databinding c# mvvm prism
2021-11-23 08:41:19
1

सबसे अच्छा जवाब

1

आप का उपयोग करना चाहिए UpdateSourceTrigger=PropertyChanged

<TextBox Text="{Binding TextValue, UpdateSourceTrigger=PropertyChanged}"/>

2021-11-23 08:59:41

वास्तव में, एक बटन क्लिक करने का मतलब है की हानि के लिए ध्यान केंद्रित पाठ बॉक्स है, तो यह चाहिए अद्यतन किया है.
Haukinger

@Haukinger हम्म...
dmitriy

@Haukinger, मैंने सोचा था कि मामला था, लेकिन अफसोस की बात है, नहीं, यह नहीं करता ट्रिगर ध्यान केंद्रित खो
Just another Dev

@Haukinger, मुझे आश्चर्य है अगर यह है क्योंकि उपकरण पट्टी और पाठ के रूप में कर रहे हैं, अलग-अलग नियंत्रण? जो समझ नहीं पड़ता है हालांकि....
Just another Dev

@JustanotherDev यह निश्चित स्रोत हो जाएगा अगर टूलबार और फार्म नियंत्रण अलग-अलग मॉडल को देखने.
Jeffery

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में