2012-01-03 78 views
0

我在我的應用程序中動態創建DataGridTemplateColumn。原因是因爲我有一個TabControl,並且當用戶想要添加一個新的Tab時,在TabItem中創建一個Datagrid。以下是我迄今爲止創建我的列的代碼:帶組合框和TextBlock的DataGridTemplateColumn

private DataGridTemplateColumn GetAccountColumn() 
    { 
     DataGridTemplateColumn accountColumn = new DataGridTemplateColumn(); 
     accountColumn.Header = "Account"; 

     string xaml = @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> 
          <TextBlock Text=""{Binding Path='Account', Mode=OneWay}"" /> 
         </DataTemplate>"; 

     StringReader stringReader = new StringReader(xaml); 
     XmlReader xmlReader = XmlReader.Create(stringReader); 

     accountColumn.CellTemplate = (DataTemplate)XamlReader.Parse(xaml); 

     xaml = @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> 
        <ComboBox ItemsSource=""{DynamicResource accounts}"" Text=""{Binding Path='Account', Mode=OneWay}"" Height=""23"" IsTextSearchEnabled=""True""/> 
       </DataTemplate>"; 

     stringReader = new StringReader(xaml); 
     xmlReader = XmlReader.Create(stringReader); 

     accountColumn.CellEditingTemplate = (DataTemplate)XamlReader.Parse(xaml); 

     return accountColumn; 
    } 

組合框中填充了完美的項目。從上面的代碼可以看出,itemsource綁定到一個可觀察的字符串集合。我通過以下運行時填充資源:

Resources["accounts"] = this.Account; 

一切似乎都很好地工作,除非以後我做在組合框中選擇和組合框失去焦點,我選擇的項目沒有在TextBlock中顯示。我怎樣才能讓這個項目出現在TextBlock中?我嘗試將模式設置爲TwoWay,但出現錯誤,提示「TwoWay或OneWayToSource綁定無法在類型爲」System.Data.DataRowView「的只讀屬性」帳戶「上工作。」

回答

1

您需要將您的ComboBoxAccount而不是Text屬性的SelectedItem屬性綁定:

xaml = @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> 
       <ComboBox ItemsSource=""{DynamicResource accounts}"" SelectedItem=""{Binding Path='Account'}"" Height=""23"" IsTextSearchEnabled=""True""/> 
      </DataTemplate>"; 

編輯

另一個問題是這樣的:

我試着設置到TwoWay的模式,但我得到一個錯誤,說「一個TwoWay或OneWayToSource綁定ing不能在'System.Data.DataRowView'類型的只讀屬性'Account'上工作。「

如果Account屬性是隻讀屬性,則不能更改它,然後編輯它根本沒有任何意義。您需要使其可寫,否則無法從UI更改它,並且無法存儲任何數據。

+0

我已經添加了這個。我仍然無法看到我在TextBlock中選擇的值。 – 2012-01-03 15:45:32

+0

@EricR。我已經更新了我的答案。您還需要從「SelectedItem」中刪除'OneWay'綁定,因爲'OneWay'意味着只有對象屬性的更改纔會傳播到UI,而不是相反 – ChrisWue 2012-01-03 17:48:24

相關問題