我正在制作一个数据可视化应用程序,我已经用 XAML 编写了 3 个列并成功绑定,但我试图让用户在运行时添加列。
我正在尝试将列标题绑定到 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();
}
listView.View 的 XAML 代码
<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 中使用的类的摘录,以及我想在绑定过程中使用的 List
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;}
我仍在寻找 Header 绑定虽然