Я создаю приложение для визуализации данных, и у меня уже есть 3 столбца, написанных на XAML и успешно связанных, но я пытаюсь разрешить пользователям добавлять столбцы во время выполнения.
Я пытаюсь привязать заголовок столбца к значению, введенному в TextBox, который входит в класс, реализующий INotifyPropertyChanged, а значение ячейки - к элементу в списке, представленном в списке объектов в DataContext.
Если это пригодится, я на .NET 4.7.2
рассматриваемый класс:
public class ColumnDescriptor : INotifyPropertyChanged
{
private string nom;
public event PropertyChangedEventHandler PropertyChanged;
public string Nom
{
get
{
return nom;
}
set
{
nom = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Nom)));
}
}
(неудачное) связывание Я пытался использовать конвертер, но он не вызывался
private void NewColumnEvent_Handler(ColumnDescriptor columnDescriptor, int columnIndex)
{
Binding b = new Binding("Columns[0]")
{
Converter = new NumberToColumnConverter(),
ConverterParameter = columnIndex.ToString(),
Mode = BindingMode.OneWay
};
GridViewColumn gridViewColumn = new GridViewColumn
{
Header = "Name",
DisplayMemberBinding = b
};
mainWindow.lvGridView.Columns.Add(gridViewColumn);
UpdateListViewDataContext();
}
XAML-код listView.View
<ListView.View>
<GridView x:Name="lvGridView">
<GridViewColumn Header="Id" Width="125">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Id}" Foreground="{Binding MessageColor}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Titre" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Titre}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="XPath_Resultat" Width="262">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding XPath_Resultat}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
это фрагмент класса, используемого в DataContext, со списком, который я хочу использовать в процессе привязки
class DataToBind
{
public List<string> Columns{get;set;}
}
Я получаю эту ошибку при добавлении строк в просмотр списка
System.Windows.Data Error: 40 : BindingExpression path error: 'Columns' property not found on 'object' ''DataToBind' (HashCode=5641212)'. BindingExpression:Path=Columns[0]; DataItem='DataToBind' (HashCode=5641212); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
Любая помощь будет принята с благодарностью
РЕДАКТИРОВАТЬ: привязка была исправлена путем изменения переменной в свойство ->
public List<string> Columns{get;set;}
Я все еще ищу привязку Заголовок, хотя