C# 将WPF DataGrid ItemsSource绑定到方法IEnumerable<;TableRow>;自定义表对象的GetRows()?
我正在努力学习WPF数据绑定,可以举个例子。回答问题并链接到帮助他们“获得”WPF数据绑定的文章的人可以获得额外的积分 我正在尝试将自定义表对象与WPF DataGrid绑定 这是我的对象(我无法更改它们,签名被截断了一点): 我认为下一步应该是将C# 将WPF DataGrid ItemsSource绑定到方法IEnumerable<;TableRow>;自定义表对象的GetRows()?,c#,.net,wpf,data-binding,C#,.net,Wpf,Data Binding,我正在努力学习WPF数据绑定,可以举个例子。回答问题并链接到帮助他们“获得”WPF数据绑定的文章的人可以获得额外的积分 我正在尝试将自定义表对象与WPF DataGrid绑定 这是我的对象(我无法更改它们,签名被截断了一点): 我认为下一步应该是将DataGrid的ItemsSource属性绑定到MyTable对象上的GetRows方法,但我不确定该怎么做。我认为这可以使用ObjectDataProvider资源来完成,但我不知道如何引用DataContext对象上的方法 有人能帮我解决这个场景
DataGrid
的ItemsSource
属性绑定到MyTable
对象上的GetRows
方法,但我不确定该怎么做。我认为这可以使用ObjectDataProvider
资源来完成,但我不知道如何引用DataContext对象上的方法
有人能帮我解决这个场景的XAML和代码隐藏吗?AFAIK您不能绑定到特定实例的方法。可以绑定到属性、在XAML中创建的实例的方法或静态方法,但不能绑定到给定实例的方法 看 下面是一些帮助我的绑定链接
我处理问题的方法是围绕MyTable对象创建一个包装器,并在包装器中实现一个调用GetRows方法的属性。将DataContext设置为包装器,并将ItemsSource绑定到属性。使用值转换器索引单元格数组非常容易。转换器的参数是索引:
...
var column = new DataGridTextColumn()
{
Header = tbl.GetColumnName(i),
Binding = new Binding
{
Converter = CellAccessConverter.Instance,
Parameter = i
}
}
...
以下是转换器本身:
private class CellAccessConverter : IValueConverter
{
public static readonly Instance = new CellAccessConverter();
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((MyTableRow)value).Cells[(int)parameter];
}
object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
享受吧 奇怪的是,您不能绑定到不是通过XAML创建的对象上的方法的返回值。
...
var column = new DataGridTextColumn()
{
Header = tbl.GetColumnName(i),
Binding = new Binding
{
Converter = CellAccessConverter.Instance,
Parameter = i
}
}
...
private class CellAccessConverter : IValueConverter
{
public static readonly Instance = new CellAccessConverter();
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((MyTableRow)value).Cells[(int)parameter];
}
object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}