我在我的應用程序中動態創建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「的只讀屬性」帳戶「上工作。」
我已經添加了這個。我仍然無法看到我在TextBlock中選擇的值。 – 2012-01-03 15:45:32
@EricR。我已經更新了我的答案。您還需要從「SelectedItem」中刪除'OneWay'綁定,因爲'OneWay'意味着只有對象屬性的更改纔會傳播到UI,而不是相反 – ChrisWue 2012-01-03 17:48:24