Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将WPF DataGrid ItemsSource绑定到方法IEnumerable<;TableRow>;自定义表对象的GetRows()?_C#_.net_Wpf_Data Binding - Fatal编程技术网

C# 将WPF DataGrid ItemsSource绑定到方法IEnumerable<;TableRow>;自定义表对象的GetRows()?

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对象上的方法 有人能帮我解决这个场景

我正在努力学习WPF数据绑定,可以举个例子。回答问题并链接到帮助他们“获得”WPF数据绑定的文章的人可以获得额外的积分

我正在尝试将自定义表对象与WPF DataGrid绑定

这是我的对象(我无法更改它们,签名被截断了一点):

我认为下一步应该是将
DataGrid
ItemsSource
属性绑定到
MyTable
对象上的
GetRows
方法,但我不确定该怎么做。我认为这可以使用
ObjectDataProvider
资源来完成,但我不知道如何引用DataContext对象上的方法


有人能帮我解决这个场景的XAML和代码隐藏吗?

AFAIK您不能绑定到特定实例的方法。可以绑定到属性、在XAML中创建的实例的方法或静态方法,但不能绑定到给定实例的方法

下面是一些帮助我的绑定链接

编辑:我意识到我可能也应该设法解决你目前的问题P

首先,我对WPF中的DataGrid控件没有太多经验。话虽如此,当您绑定ItemsSource时,它不是自动生成列吗


我处理问题的方法是围绕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();
    }
  }