2016-07-16 2 views
3

사용자 지정 DataGridTextColumn을 추가하여이 셀에서 내용이 변경 될 때 이벤트를 발생시킬 수 있습니다.DataGridTextColumn에 이벤트 또는 명령 추가

참고 :

나는 것을 알고이있는 DataGridTemplateColumn를 사용하지 않습니다. 나는 우리가 사용하는 텍스트 컬럼과 함께 많은 기능이 있기 때문에 내 자신의 텍스트 컬럼을 만들고 싶다.

그래서 간단하게 이벤트를 사용자 정의 컨트롤에 추가하기로 결정했습니다. 별로. 음, AddHandler 또는 RemoveHandler 방법이 없다는 것을 알 수 있습니다.

내가 어디로 잘못 가고 있는지 설명해주십시오.

코드 :

public static readonly RoutedEvent TextChangedEvent = 
EventManager.RegisterRoutedEvent("TextChanged", RoutingStrategy.Bubble, 
    typeof (RoutedEventHandler), 
    typeof (DataGridTextChangedEventColumn)); 

public event RoutedEventHandler TextChanged 
{ 
    add { AddHandler(TextChangedEvent, value); } 
    remove { RemoveHandler(TextChangedEvent, value); } 
} 

private void AddHandler(RoutedEvent textChangedEvent, RoutedEventHandler value) 
{ 
    this.TextChanged += (s, e) => textChangedEvent; 
} 

감사합니다.

답변

1

당신이 "당신의"사용자 정의 DatagridTextColumn을 만들려면 DataGridTextColumn에서 상속 CustomControl를 만들 수 있습니다.

이렇게하면 그리드 편집 모양과 관련된 컨트롤 (일반적으로 TextBox)을 반환하는 "GenerateEditingElement"메서드를 재정의 할 수 있습니다.

이 메서드를 재정의하는 동안 TextChanged 이벤트에 이벤트 처리기를 연결할 수 있습니다.

public class YourCustomDataGridTextColumn : DataGridTextColumn 
{ 


public delegate void ColumnTextChangedHandler(object sender,TextChangedEventArgs e); 
public event ColumnTextChangedHandler ColumnTextChanged; 

    #region "Methods" 

    protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem) 
    { 
     var textBox = (TextBox)base.GenerateEditingElement(cell, dataItem); 
     textBox.TextChanged += OnTextChanged; 

     return textBox; 
    } 

    private void OnTextChanged(object sender, TextChangedEventArgs e) 
    { 
     //Your event handling 
     if (ColumnTextChanged != null) { 
       ColumnTextChanged(sender, e); 
      } 
    } 

    #endregion  
} 
+0

고맙습니다. 유일한 것은 'GenerateElement'에서 'GetBinding'을 입력하면 나타나는 것입니다. 매핑이 누락 되었습니까? – JamTay317

+0

@ JamTay317 오류입니다. 나는이 스 니펫을 내가 작성한 클래스에서 복사 했으므로 그 메소드를 삭제하지 않았다. 원하는 경우 DataGridTextColumn의 기본 동작은보기 모드에있을 때 TextBlock을 반환하기 때문에 생략 할 수 있습니다. – CiccioRocca

+0

감사합니다. 나는 그것을 삭제했습니다 – JamTay317

관련 문제