0

我正在我的应用程序中动态创建一个 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' 起作用。”

4

1 回答 1

1

您需要将SelectedItem您的属性绑定ComboBoxAccount而不是Text属性:

 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,但我收到一条错误消息,提示“A TwoWay 或 OneWayToSource 绑定无法对 'System.Data.DataRowView' 类型的只读属性 'Account' 起作用。”

如果该Account属性是只读的,则您无法更改它,那么对其进行编辑就毫无意义。您需要使其可写,否则您无法从 UI 更改它,也无法存储任何数据。

于 2012-01-03T00:26:45.813 回答