DataGridTemplateColumn с ComboBox и TextBlock - PullRequest
0 голосов
/ 03 января 2012

Я динамически создаю 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;
    }

Поле со списком отлично заполнено. Как видно из приведенного выше кода, ресурс items связан с наблюдаемой коллекцией строк. Я заполняю ресурс во время выполнения следующим образом:

Resources["accounts"] = this.Account;

Кажется, что все работает хорошо, за исключением того, что я делаю выделение в выпадающем списке, и выпадающий список теряет фокус, выбранный элемент не отображается в текстовом блоке. Как сделать так, чтобы этот элемент отображался в TextBlock? Я попытался установить режим для TwoWay, но я получаю сообщение об ошибке, в котором говорится: «Привязка TwoWay или OneWayToSource не может работать со свойством только для чтения« Account »типа« System.Data.DataRowView ».

1 Ответ

1 голос
/ 03 января 2012

Вам необходимо привязать свойство SelectedItem вашего ComboBox к Account, а не свойство 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, но я получаю сообщение об ошибке, в котором говорится: «Привязка TwoWay или OneWayToSource не может работать с доступным только для чтения свойством« Account »типа« System.Data.DataRowView »."

Если свойство Account доступно только для чтения, его нельзя изменить, тогда редактирование вообще не имеет смысла. Вам нужно сделать его доступным для записи, иначе вы не сможете изменить его из пользовательского интерфейса и не сможете хранить данные.

...