반응형
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
반응형
'programing' 카테고리의 다른 글
각 루프에 대해 루프의 마지막 반복을 결정합니다. (0) | 2023.05.25 |
---|---|
할당 표현식이란 무엇입니까("왈러스" 또는 ":=" 연산자 사용)?이 구문이 추가된 이유는 무엇입니까? (0) | 2023.05.25 |
쿼리를 사용하여 기존 테이블에 대한 SQL 생성 스크립트 생성 (0) | 2023.05.25 |
Eclipse 출력 콘솔의 용량을 늘리려면 어떻게 해야 합니까? (0) | 2023.05.25 |
PowerShell 스크립트가 실행되지 않는 이유는 무엇입니까? (0) | 2023.05.25 |