2011-08-18 88 views
0

因此,我正在動態構建silverlight數據網格(列和單元格),我需要我的用戶能夠更改列標題。我在DataGridColumnHeader.ContentTemplate上使用了綁定到Header(我認爲)的TextBox的DataTemplate。如何在silverlight 4 datagrid中創建可編輯的列標題?

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

但是,當我改變文本框的文本時,實際的Header值不會改變。我想我需要使用2方式綁定,但我不知道如何工作。我一直試圖圍繞silverlight/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)); 
     } 
    } 
} 

然後我用這些對象類型爲我的列標題。所以,我的頭樣式摸索出爲:

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

這導致在頁眉值(這是SingleString對象)有沒有值發生了變化時,文本框的文本改變。這導致了我的出口正確的行爲。謝謝您的幫助。