WPF MVVM วิธีที่จะรับข้อความเปลี่ยนแปลงอยู่คลิกที่ปุ่ม

0

คำถาม

ฉันทำงานอยู่บน WPF โครงการกับ MVVM และฉันเจอปัญหาของไม่ยอมรับสายสุดท้ายข้อความเปลี่ยนไปเมื่อข้าอคลิกที่ปุ่มบันทึก.

ของส่วนประกอบติดตั้งแบบนี้:

  1. เป็นแถบเครื่องมือมุมมองกับบนแถบเครื่องมือ VM ซึ่งมีบันทึกปุ่ม. ปุ่ม คลิกเหตุการณ์มันจะเป็น Icommand.
  2. เป็นรูปแบบมุมมองกับกลุ่มของข้อความช่องข้อมูลจะถูเป็น sepreate VM.
  3. แถบเครื่องมือมุมมองและรูปแบบมุมมองอยู่ใน seperate งแฟ้ม
  4. ทั้งหมดของฉั VMs inherits จาก BindableBase(ส่วนหนึ่งของ Prism.MvvM ล่อง)

บนคลิกที่ปุ่มฉันจะใช้ค่าจากรูปแบบ VM และช่วยพวกเขา...เรียบง่ายและ 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

ในความเป็นจริงการคลิกปุ่มหมายถึงการสูญเสียของโฟกัสสำหรับ textbox ดังนั้นมัน ควรจะ ต้องปรับปรุงเรียบร้อยแล้ว
Haukinger

@Haukinger อืม...
dmitriy

@Haukinger ฉันคิดว่านั่นเป็นคดีแต่น่าเศร้าที่ไม่มีมัน doesnt ระตุ้นสูญเสียโฟกัส
Just another Dev

@Haukinger ฉันสงสัยว่ามันเป็นเพราะคนแถบเครื่องมือและข้อความแบบฟอร์อยู่ใน seperate ควบคุม? ซึ่งมันไม่มีเหตุผลเลย...
Just another Dev

@JustanotherDev มันอาจจะต้องเป็นแหล่งหาที่แถบเครื่องมือและรูปแบบควบคุมมีบุคคลหนึ่งมุมมองนางแบบ
Jeffery

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่