属性换的不会执行

发布于 2025-02-02 05:22:50 字数 1315 浏览 3 评论 0原文

我正在尝试以Windows表单实现MVP,我将所有控件都绑定到绑定源的相应属性,并且当用户更改某些内容并从控件中丢失焦点时,我希望将属性换的事件立即执行。 目前,只有当我输入主持人 - >例如view.username =“ sosings”;但是我不想要这个。

public string Username
    {
        get { return txtUsername.Text; }
        set {
            var oldValue = txtUsername.Text;
            txtUsername.Text = value;
            NotifyPropertyChanged("Name", oldValue, value);
        }
    }




    public class PropertyChangedExtendedEventArgs : PropertyChangedEventArgs
{
    public virtual object OldValue { get; private set; }
    public virtual object NewValue { get; private set; }

    public PropertyChangedExtendedEventArgs(string propertyName, object oldValue,
           object newValue)
           : base(propertyName)
    {
        OldValue = oldValue;
        NewValue = newValue;
    }
}




public partial class MasterForm : Form, INotifyPropertyChanged
{
    public MasterForm()
    {
        InitializeComponent();
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void NotifyPropertyChanged(string propertyName, object oldvalue, object newvalue)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedExtendedEventArgs(propertyName, oldvalue, newvalue));
    }

    private void MasterForm_Load(object sender, EventArgs e)
    {
    }
}

I am trying to implement MVP in windows forms, i have all controls binded to a corresponding property of a binding source, and i want, when the user change something and lost focus from the control, the propertychanged event to get executed immediately.
For now it is only get executed if i type in presenter -> e.g. view.Username = "something"; but i dont want this.

public string Username
    {
        get { return txtUsername.Text; }
        set {
            var oldValue = txtUsername.Text;
            txtUsername.Text = value;
            NotifyPropertyChanged("Name", oldValue, value);
        }
    }




    public class PropertyChangedExtendedEventArgs : PropertyChangedEventArgs
{
    public virtual object OldValue { get; private set; }
    public virtual object NewValue { get; private set; }

    public PropertyChangedExtendedEventArgs(string propertyName, object oldValue,
           object newValue)
           : base(propertyName)
    {
        OldValue = oldValue;
        NewValue = newValue;
    }
}




public partial class MasterForm : Form, INotifyPropertyChanged
{
    public MasterForm()
    {
        InitializeComponent();
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void NotifyPropertyChanged(string propertyName, object oldvalue, object newvalue)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedExtendedEventArgs(propertyName, oldvalue, newvalue));
    }

    private void MasterForm_Load(object sender, EventArgs e)
    {
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

女皇必胜 2025-02-09 05:22:50

您正在问当用户更改某些内容并因控件而失去焦点时,属性换事的事件将立即执行

此代码显示了如何捕获UI控件的LostFocus事件以启动所需的事件。

public partial class MasterForm : Form , INotifyPropertyChanged
{
    public MasterForm ()
    {
        InitializeComponent();
    }

    protected override void OnHandleCreated(EventArgs e)
    {
        base.OnHandleCreated(e);
        // Subscribe to the event here
        textBoxUsername.LostFocus += onUsernameLostFocus;
    }

    // Handle the event here
    private void onUsernameLostFocus(object sender, EventArgs e)
    {
        OnPropertyChanged(nameof(Username));
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    string _username = string.Empty;
    public string Username
    {
        get => _username;
        set
        {
            if (_username != value)
            {
                _username = value;
                OnPropertyChanged();
            }
        }
    }
}

You're asking When the user change something and lost focus from the control, the propertychanged event to get executed immediately.

This code shows how to capture the LostFocus event of your UI control to fire the event you want.

public partial class MasterForm : Form , INotifyPropertyChanged
{
    public MasterForm ()
    {
        InitializeComponent();
    }

    protected override void OnHandleCreated(EventArgs e)
    {
        base.OnHandleCreated(e);
        // Subscribe to the event here
        textBoxUsername.LostFocus += onUsernameLostFocus;
    }

    // Handle the event here
    private void onUsernameLostFocus(object sender, EventArgs e)
    {
        OnPropertyChanged(nameof(Username));
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    string _username = string.Empty;
    public string Username
    {
        get => _username;
        set
        {
            if (_username != value)
            {
                _username = value;
                OnPropertyChanged();
            }
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文