У меня есть динамически сгенерированный ListView, который использует привязку данных для редактирования некоторых значений Boolean
через CheckBox. Я использую IValueConverter для создания столбцов в ListView в (как в this ответ):CheckBox, отображаемый как метка
public object Convert (object Value, Type EntryType, object Parameter, System.Globalization.CultureInfo Culture)
{
var Config = Value as ColumnConfig;
if (Config != null)
{
var GridView = new GridView();
Binding NameBinding = new Binding ("Name");
GridViewColumn BaseColumn = new GridViewColumn { Header = "Settings",
DisplayMemberBinding = NameBinding,
Width = 125,
CellTemplate = new DataTemplate()};
GridView.Columns.Add (BaseColumn);
foreach (Column CurrentColumn in Config.Columns)
{
Binding NewBinding = new Binding (CurrentColumn.DataField);
FrameworkElementFactory FEF = new FrameworkElementFactory (typeof (CheckBox));
FEF.SetBinding (CheckBox.IsCheckedProperty, NewBinding);
GridViewColumn GVColumn = new GridViewColumn
{
Header = CurrentColumn.Header,
DisplayMemberBinding = NewBinding
};
var DTemplate = new DataTemplate();
DTemplate.VisualTree = FEF;
GVColumn.CellTemplate = DTemplate;
GridView.Columns.Add (GVColumn);
}
return GridView;
}
return Binding.DoNothing;
}
Который используется, как это в XAML:
<ListView Margin="2" ItemContainerStyle="{StaticResource LineHighlightListView}"
ItemsSource="{Binding InMatrixList}"
View="{Binding InMatrixColumns, Converter={StaticResource ConvertItemsToDynamicGridView}}" />
заголовки столбцов, генерируются в другом месте. Код должен принимать значения ColumnConfig
и создавать объекты GridViewColumn
с привязкой к базе данных ChechBox
для некоторых других целей в другом месте. Тем не менее, все, что я получаю, это столбцы с текстом вместо CheckBoxes. Текст верный, поэтому привязка данных действительна, но объект FrameworkElementFactory
работает не так, как ожидалось.
Почему флажки отображаются/конвертируются в текстовые поля?
Это действительно плохой способ сделать это. Вместо этого используйте MVVM и шаблоны данных –
@Glen Thomas Я уже использую MVVM. Я не думаю, что есть способ сделать это правильно с DataTemplates, не так ли? DataTemplate применим ко всем ячейкам, включая первый столбец, который является текстовым. – MKII
Вы чувствуете, что идете по кроличьей дыре? Потому что ты спускаешься в кроличью нору. Создайте настраиваемый элемент управления или пользовательский элемент управления, который управляет пользовательским интерфейсом в коде, основываясь на состоянии объектов, с которыми он связан. – Will