我正在我的应用程序中动态创建DataGridTemplateColumn。原因是因为我有一个TabControl,当用户想要添加一个新的Tab时,会在TabItem中创建一个Datagrid。这是我到目前为止创建列的代码:
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,但是我收到一条错误消息“两个或两个OneWayToSource绑定无法在'System.Data.DataRowView'类型的只读属性'Account'上工作。”
答案 0 :(得分:1)
您需要将SelectedItem
的{{1}}属性绑定到ComboBox
而不是Account
属性:
Text
修改强>
另一个问题是:
我尝试将模式设置为TwoWay但是我收到一条错误消息“两个或两个OneWayToSource绑定无法在'System.Data.DataRowView'类型的只读属性'Account'上工作。”
如果 xaml = @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
<ComboBox ItemsSource=""{DynamicResource accounts}"" SelectedItem=""{Binding Path='Account'}"" Height=""23"" IsTextSearchEnabled=""True""/>
</DataTemplate>";
属性是只读的,则无法更改它,那么编辑它根本就没有意义。您需要使其可写,否则您无法从UI更改它,并且您无法存储任何数据。