2011-08-18 4 views
0

그래서 실버 라이트 DataGrid를 동적으로 (열과 셀) 만들고있어 사용자가 열 헤더를 변경할 수 있어야합니다. DataGridColumnHeader.ContentTemplate에서 Header에 바인딩 된 TextBox가있는 DataTemplate을 사용했습니다.Silverlight에서 편집 가능한 열 머리글을 만드는 방법 4 DataGrid?

<DataTemplate xmlns='http://schemas.microsoft.com/client/2007'> 
    <TextBox Text='{Binding}' /> 
</DataTemplate> 

그러나 텍스트 상자의 텍스트를 변경하면 실제 헤더 값이 변경되지 않습니다. 나는 2 방향 바인딩을 사용해야한다고 생각하지만 어떻게 작동 할 지 확신하지 못합니다. 나는 실버 라이트/wpf 바인딩 주위에 머리를 감싸려고했지만 조금 힘들어하고있다.

textbox.textchanged 이벤트를 사용하여 업데이트 할 수 있다고 생각합니다. 그러나 나는 그것이 xaml에서 더 깨끗할 것이라고 생각한다.

제안 사항? 누군가 편집 가능한 열 머리글이있는 DataGrid를 만들어야 만한다고 생각합니다.

+0

데이터 표의 첫 번째 행을 편집하여 열 머리글을 사용하는 대신 머리글로 사용하려는 것 같습니다. 그렇지 않다면 열 머리글을 정의한 방식을 보여줄 수 있습니까? –

답변

0

괜찮 았어. 그래서 난 그냥과 같이 문자열 래퍼 클래스를 생성 :

public class SingleString:System.ComponentModel.INotifyPropertyChanged 
{ 
    String _value = ""; 
    public String Value 
    { 
     get { return _value; } 
     set 
     { 
      _value = value; 
      OnPropertyChanged("Value"); 
     } 
    } 

    public SingleString() 
    { 
    } 
    public SingleString(String val) 
    { 
     Value = val; 
    } 

    public override string ToString() 
    { 
     return Value; 
    } 

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(string propName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
     } 
    } 
} 

가 그럼 난 내 열 머리글을 위해 그 객체 유형을 사용했다. 이 텍스트 상자의 텍스트가 변경되었을 때이 변경된 값하도록 (객체를 SingleString하는) 헤더 값의 결과

<Style x:Key="TextBoxHeader" TargetType="dataprimitives:DataGridColumnHeader"> 
     <Setter Property="ContentTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <TextBox Text="{Binding Value, Mode=TwoWay}"/> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

: 그래서 내 헤더 스타일 인 것을했다. 그 결과 내 내보내기에 올바른 동작이 발생했습니다. 도와 주셔서 감사합니다.

관련 문제