C# 带有组合框和文本块的DataGridTemplateColumn

C# 带有组合框和文本块的DataGridTemplateColumn,c#,wpf,xaml,datagrid,xamlreader,C#,Wpf,Xaml,Datagrid,Xamlreader,我正在应用程序中动态创建DataGridTemplateColumn。这是因为我有一个TabControl,当用户想要添加一个新的选项卡时,就会在TabItem中创建一个Datagrid。以下是我到目前为止创建专栏的代码: private DataGridTemplateColumn GetAccountColumn() { DataGridTemplateColumn accountColumn = new DataGridTemplateColumn();

我正在应用程序中动态创建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;
    }

一切似乎都很好地工作,除了在组合框中进行选择并且组合框失去焦点后,我选择的项目不会显示在文本块中。如何使此项显示在文本块中?我尝试将模式设置为双向,但我收到一个错误提示:“双向或单向到源绑定无法在类型为“System.Data.DataRowView”的只读属性“Account”上工作。”

您需要将
组合框的
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>";
xaml=@”
";
编辑

另一个问题是:

我尝试将模式设置为双向,但出现一个错误,提示“双向或单向ToSource绑定无法在类型为“System.Data.DataRowView”的只读属性“Account”上工作。”


如果
帐户
属性为只读,则无法对其进行更改,则编辑它毫无意义。您需要使其可写,否则您无法从UI更改它,也无法存储任何数据。

我已在中添加了此项。我仍然无法看到我在文本块中选择的值。@EricR。我已经更新了我的答案。您还需要从
SelectedItem
中删除
one-way
绑定,因为
one-way
意味着只有对对象属性的更改才会传播到UI,而不是反过来
 xaml = @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
                 <ComboBox ItemsSource=""{DynamicResource accounts}"" SelectedItem=""{Binding Path='Account'}"" Height=""23"" IsTextSearchEnabled=""True""/>
             </DataTemplate>";