我正在我的应用程序中动态创建一个 DataGridTemplateColumn。这样做的原因是因为我有一个 TabControl,当用户想要添加一个新选项卡时,会在 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,但我收到一条错误消息,提示“A TwoWay 或 OneWayToSource 绑定无法对 'System.Data.DataRowView' 类型的只读属性 'Account' 起作用。”