DataGridTemplateColumn с ComboBox и TextBlock
Я создаю 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;
}
Поле со списком отлично заполнено. Как вы можете видеть из приведенного выше кода, источник данных связан с наблюдаемой коллекцией строк. Я заполняю ресурс во время выполнения следующим образом:
Resources["accounts"] = this.Account;
Кажется, все работает хорошо, за исключением того, что я делаю выделение в выпадающем списке, и выпадающий список теряет фокус, выбранный элемент не отображается в TextBlock. Как сделать так, чтобы этот элемент отображался в TextBlock? Я попытался установить режим на TwoWay, но я получаю сообщение об ошибке, в котором говорится: "Привязка TwoWay или OneWayToSource не может работать с доступным только для чтения свойством"Account "типа" System.Data.DataRowView "."
1 ответ
Вы должны связать 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
свойство доступно только для чтения, вы не можете изменить его, тогда редактирование не имеет никакого смысла вообще. Вы должны сделать его доступным для записи, иначе вы не сможете изменить его из пользовательского интерфейса и не сможете хранить какие-либо данные.