2009-03-03 12 views
7

내가 조회 텍스트 상자에있는 사용자 지정 컨트롤 (Windows Form에)가 있습니다. 컨트롤의 속성은 현재 선택이며 "식별자", "코드"및 "설명"이 포함 된 사용자 지정 개체입니다. 이 속성은 BindingSource를 사용하는 Databound입니다. 정보를 표시데이터 바인딩 사용자 정의 컨트롤

잘 작동합니다. 반면에 OnValidate 또는 OnValueChange를 업데이트 설정 여부에 관계없이 BindingSource를 업데이트하지 않습니다. 자동 업데이트를 위해 누락 된 부분이 있습니까? 정보를 표시

private System.Windows.Forms.BindingSource buildPlanComponentDataBindingSource; 

    public void LoadBuildPlan(string itemNumber) 
    { 
     var buildPlanComponents = BuildPlan.LoadBuildPlanComponents(itemNumber, AutomaticPrice); 
     buildPlanComponentDataBindingSource.DataSource = buildPlanComponents; 
     AssemblyNumber = itemNumber; 
    } 




[Bindable(true)] 
[DefaultValue(null)] 
public ILookupSelection CurrentSelection 
{ 
    get 
    { 
     if (currentSelection == null) 
      currentSelection = new LookupSelection {Code = txtLookup.Text}; 

     return currentSelection; 
    } 

    set 
    { 
     if (value == null) return; 

     currentSelection = value; 

     SetText(currentSelection, DisplayText); 
     SetDescription(currentSelection, DisplayDescription); 
    } 
} 
+0

당신은 우리에게 당신이 데이터 바인딩을 만드는 코드를 보여줄 수 있을까? – overslacked

+0

감사합니다. 귀하의 질문은 매우 도움이되었습니다. 어떤 이유로 MSDN 튜토리얼에서는 자습서의 [Bindable (true)] 특성을 사용하지 않았습니다. 중요한 세부 사항입니다! –

답변

2

구현에서 INotifyPropertyChanged는 해결책이 될 것 같다!

#region IPropertyChanged 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); 
    } 

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (null != PropertyChanged) 
     { 
      PropertyChanged(this, e); 
     } 
    } 

    #endregion 
+0

IPropertyChanged는 INotifyPropertyChanged를 읽어야합니다. 상속을 정의 할 때 코드를 복사하고이 세부 사항에 속지. 그렇지 않으면 이것은 훌륭합니다, +1 – Marcel

0

큰 작동합니다. 반면에 상관없이 내가 OnValidate 에 업데이트를 설정 여부를 또는 OnValueChange의 그것은 에 BindingSource를 업데이트하지 않습니다.

실제로이의 확실하지 않다 코드를 찾고 있습니다. 귀하의 세트에서, 당신은 null과 포기를 테스트합니다; 데이터에 실제로 null이 포함 된 경우 (이는 사용자가 설명하는 것입니다.) 컨트롤이 동기화되지 않습니다. 아마도 그 수표가 근본적인 문제를 가리고 있는지 궁금해.

+0

컨트롤이 처음 생성 될 때가 실제로는 오직 NULL입니다. 그렇지 않으면 값이 포함 된 선택이 이루어진 경우에만 설정됩니다. – ejmack

+0

그렇다면 값 == null 이외의 다른 플래그를 사용하여 테스트하는 것이 좋습니다. 속성에 대한 데이터 바인딩은 앞뒤로 진행되는 과정입니다 ... 어떤면에서이 비트를 정리할 것이지만 결국에는 문제를 해결하는 데 긍정적이지는 않습니다. – overslacked

0

데이터 바인딩이 값을이 방식으로 설정하는 각 컨트롤에 대한 값을 쓸 필요가 있을까요?

txtMySetValue라는 텍스트 박스 바인딩 한 데이터를 가정하면

txtMySetValue.DataBindings [0] .WriteValue();

관련 문제