문제

나는 다음과 같은 수업을 가지고 있습니다

public class Car
{
   public Name {get; set;}
}

프로그래밍 방식으로 이것을 텍스트 상자에 바인딩하고 싶습니다.

어떻게 해야 하나요?

어둠 속에서 촬영:

...
Car car = new Car();
TextEdit editBox = new TextEdit();
editBox.DataBinding.Add("Name", car, "Car - Name");
...

다음 오류가 발생합니다.

"대상 컨트롤의 '이름' 속성에 바인딩할 수 없습니다.

내가 뭘 잘못하고 있고 어떻게해야합니까?웹 개발에서 데이터 바인딩 개념을 이해하기가 약간 어렵다는 것을 알았습니다.

도움이 되었습니까?

해결책

당신이 원하는

editBox.DataBindings.Add("Text", car, "Name");

첫 번째 매개 변수는 데이터 바인딩하려는 컨트롤의 속성 이름이고, 두 번째 매개 변수는 데이터 소스이며, 세 번째 매개 변수는 바인딩하려는 데이터 소스의 속성입니다.

다른 팁

구문을 보지 않고도 다음과 같다고 확신합니다.

editBox.DataBinding.Add("Text", car, "Name");
editBox.DataBinding.Add("Text", car, "Name");

첫 번째 인수는 컨트롤 속성의 이름이고, 두 번째 인수는 바인딩할 개체이며, 마지막 인수는 데이터 소스로 사용하려는 개체 속성의 이름입니다.

데이터 바인딩 라인이 매우 가깝습니다.

editBox.DataBinding.Add("Text", car, "Name");

이 첫 번째 매개변수는 데이터 바인딩될 편집 상자 개체의 속성입니다.두 번째 매개변수는 바인딩하려는 데이터 소스이고 마지막 매개변수는 바인딩하려는 데이터 소스의 속성입니다.

데이터 바인딩은 단방향이므로 편집 상자를 변경하면 자동차 개체가 업데이트되지만 자동차 이름을 직접 변경하면 편집 상자가 업데이트되지 않습니다.

노력하다:

editBox.DataBinding.Add( "Text", car", "Name" );

나는 그것을 믿는다

editBox.DataBindings.Add(new Binding("텍스트", 자동차, "이름"));

트릭을 수행해야합니다.시도해 보진 않았지만 그게 아이디어인 것 같아요.

TextEdit 컨트롤의 "이름"에 바인딩하려고 합니다.이름은 프로그래밍 방식으로 컨트롤에 액세스하는 데 사용되며 바인딩할 수 없습니다.컨트롤의 텍스트에 바인딩해야 합니다.

다음은 속성으로 사용할 수 있고 속성 값의 변경 사항을 캡처하기 위해 바인딩된 컨트롤에서 사용되는 INotifyPropertyChanged를 구현하는 일반 클래스입니다.

public class NotifyValue<datatype> : INotifyPropertyChanged 
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    datatype _value;
    public datatype Value
    {
        get
        {
            return _value;
        }
        set
        {
            _value = value;
            PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Value"));
        }
    }

}

다음과 같이 선언할 수 있습니다.

public NotifyValue<int> myInteger = new NotifyValue<int>();

다음과 같은 텍스트 상자에 할당되었습니다.

Textbox1.DataBindings.Add(
    "Text", 
    this, 
    "myInteger.Value", 
    false, 
    DataSourceUpdateMode.OnPropertyChanged
);

..여기서 "Text"는 텍스트 상자의 속성이고 'this'는 현재 Form 인스턴스입니다.

클래스는 INotifyPropertyChanged 클래스를 상속할 필요가 없습니다.System.ComponentModel.PropertyChangedEventHandler 유형의 이벤트를 선언하면 클래스 변경 이벤트가 컨트롤 데이터 바인더에 의해 구독됩니다.

C# 4.6 구문 사용:

editBox.DataBinding.Add(nameof(editBox.Text), car, nameof(car.Name));

car가 null이면 위의 코드는 리터럴 문자열을 사용하여 datamember ~의 car

그것은

 this.editBox.DataBindings.Add(new Binding("Text", car, "Name"));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top