programing

Winforms에서 컨트롤에 대한 속성 바인딩

testmans 2023. 5. 25. 21:37
반응형

Winforms에서 컨트롤에 대한 속성 바인딩

속성 값이 변경될 때 컨트롤의 바인딩된 속성이 변경되도록 컨트롤에 속성을 바인딩하는 가장 좋은 방법은 무엇입니까?

그래서 만약 내가 재산을 가지고 있다면,FirstName텍스트 상자에 묶고 싶은 정보txtFirstName텍스트 값.그래서 내가 바뀌면,FirstName"Stack"을 값으로 지정한 다음 속성txtFirstName.Text값 "Stack"도 변경됩니다.

이것이 어리석은 질문으로 들릴 수도 있다는 것을 알지만 도움을 주신다면 감사하겠습니다.

구현해야 합니다.INotifyPropertyChanged텍스트 상자에 바인딩을 추가합니다.

C# 코드 스니펫을 제공하겠습니다.도움이 되길 바랍니다.

class Sample : INotifyPropertyChanged
{
    private string firstName;
    public string FirstName
    {
        get { return firstName; }
        set
        {
            firstName = value;
            InvokePropertyChanged(new PropertyChangedEventArgs("FirstName"));
        }
    }

    #region Implementation of INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    public void InvokePropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, e);
    }

    #endregion
}

용도:

 Sample sourceObject = new Sample();
 textbox.DataBindings.Add("Text",sourceObject,"FirstName");
 sourceObject.FirstName = "Stack"; 

다음과 같은 모든 속성 설정자에 속성 이름을 수동으로 입력할 필요가 없는 승인된 답변의 단순화된 버전OnPropertyChanged("some-property-name")대신 당신은 그냥 전화합니다.OnPropertyChanged()매개 변수 없음:

.NET 4.5 이상이 필요합니다. CallerMemberName에 있습니다.System.Runtime.CompilerServices네임스페이스

public class Sample : INotifyPropertyChanged
{
    private string _propString;
    private int _propInt;


    //======================================
    // Actual implementation
    //======================================
    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
    //======================================
    // END: actual implementation
    //======================================


    public string PropString
    {
        get { return _propString; }
        set
        {
            // do not trigger change event if values are the same
            if (Equals(value, _propString)) return;
            _propString = value;

            //===================
            // Usage in the Source
            //===================
            OnPropertyChanged();

        }
    }

    public int PropInt
    {
        get { return _propInt; }
        set
        {
            // do not allow negative numbers, but always trigger a change event
            _propInt = value < 0 ? 0 : value;
            OnPropertyChanged();
        }
    }
}

사용량은 동일하게 유지됩니다.

var source = new Sample();
textbox.DataBindings.Add("Text", source, "PropString");
source.PropString = "Some new string";

이것이 누군가에게 도움이 되기를 바랍니다.

언급URL : https://stackoverflow.com/questions/5883282/binding-property-to-control-in-winforms

반응형