Wpf 属性名称不可用于我的datagrid列绑定

Wpf 属性名称不可用于我的datagrid列绑定,wpf,xaml,mvvm,datagrid,Wpf,Xaml,Mvvm,Datagrid,刚刚开始学习WPF XAML中的DataGrid。代码如下: 模型 视图模型 Public Class IdeaViewModel Implements INotifyPropertyChanged Public Shared Property allIdeas() As New ObservableCollection(Of Idea) Public Sub New() For index = 1 To 10 Dim anitem As New Idea

刚刚开始学习WPF XAML中的DataGrid。代码如下:

模型

视图模型

Public Class IdeaViewModel
  Implements INotifyPropertyChanged

  Public Shared Property allIdeas() As New ObservableCollection(Of Idea)

  Public Sub New()
    For index = 1 To 10
      Dim anitem As New Idea
      anitem.Name = "Value " & index
      allIdeas.Add(anitem)
    Next
  End Sub

  Public ReadOnly Property AddAnItemToList() As ICommand
    Get
      Return New RelayCommand(AddressOf InsertAnItem)
    End Get
  End Property

  Public Sub InsertAnItem()
    Dim anItem As New Idea
    anItem.Name = "Item " & allIdeas.Count()
    allIdeas.Add(anItem)
  End Sub

  Public ReadOnly Property ClearTheList() As ICommand
    Get
      Return New RelayCommand(AddressOf ClearStoredList)
    End Get
  End Property

  Public Sub ClearStoredList()
    allIdeas.Clear()
  End Sub


  Public Event PropertyChanged As PropertyChangedEventHandler _
        Implements INotifyPropertyChanged.PropertyChanged
End Class
视图(仅限XAML,无代码隐藏)


第一个DataGrid运行良好。第二个DataGrid当然没有,因为您无法将列绑定到整个
allIdeas
对象。我只是留下了那段代码来指出我想要的东西,比如
“{Binding Name}”
,但是我绑定DataGrid的方式是不正确的&我还没有找到一篇文章能够在这样一个基本的层次上讨论这个主题

我试图在DataGrid中实现双向绑定,但我想确保首先了解数据是如何连接的。这就是为什么我试图手动将ViewModel的ObservableCollection的属性绑定到DataGrid中的列。

试试这个

<DataGrid Height="100"
          ItemsSource="{Binding allIdeas}"
          AutoGenerateColumns="False"
          >
  <DataGridTextColumn Binding="{Binding IdeaID}"/>
  <DataGridTextColumn Binding="{Binding Name}"/>
</DataGrid>

试试这个

<DataGrid Height="100"
          ItemsSource="{Binding allIdeas}"
          AutoGenerateColumns="False"
          >
  <DataGridTextColumn Binding="{Binding IdeaID}"/>
  <DataGridTextColumn Binding="{Binding Name}"/>
</DataGrid>

我正在修改阿奎尔基的答案,但他现在似乎已经走神了。他的回答有错误

<DataGrid Height="100"
          ItemsSource="{Binding allIdeas}"
          AutoGenerateColumns="False"
          >
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding IdeaID}"/>
        <DataGridTextColumn Binding="{Binding Name}"/>
    </DataGrid.Columns>
</DataGrid>

我正在修改阿奎尔基的答案,但他现在似乎已经走神了。他的回答有错误

<DataGrid Height="100"
          ItemsSource="{Binding allIdeas}"
          AutoGenerateColumns="False"
          >
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding IdeaID}"/>
        <DataGridTextColumn Binding="{Binding Name}"/>
    </DataGrid.Columns>
</DataGrid>



我确实尝试过,但没有成功,只是再试了一次。它在第一个DataGridTextColumn的Binding关键字处引发异常。intellisense将弹出与DataGrid元素中第一个绑定相同的选项集。我知道有时我们不能在intellisense中看到所有内容,但我认为在这种情况下,我应该看到集合的属性显示,是吗?异常是什么?@Alan如果向列绑定添加Mode=OneWay怎么办?
'add value to collection of type'System.Windows.Controls.ItemCollection'引发异常。
。这发生在上面的简单更改中。但是,我确实确定涉及ItemsSource分配。如果我只是删除了这个赋值,那么不会抛出异常。@Alan试试我对AQuirky答案的理解。我刚刚意识到这个例外可能意味着什么。它将这些DataGridTextColumns视为网格集合中的项,而不是列集合中的列。我确实尝试过,但没有成功,只是再试了一次。它在第一个DataGridTextColumn的Binding关键字处引发异常。intellisense将弹出与DataGrid元素中第一个绑定相同的选项集。我知道有时我们不能在intellisense中看到所有内容,但我认为在这种情况下,我应该看到集合的属性显示,是吗?异常是什么?@Alan如果向列绑定添加Mode=OneWay怎么办?
'add value to collection of type'System.Windows.Controls.ItemCollection'引发异常。
。这发生在上面的简单更改中。但是,我确实确定涉及ItemsSource分配。如果我只是删除了这个赋值,那么不会抛出异常。@Alan试试我对AQuirky答案的理解。我刚刚意识到这个例外可能意味着什么。它将这些DataGridTextColumns视为网格集合中的项,而不是列集合中的列。您希望第二个数据网格中有什么?与第一个自动生成的网格中的内容完全相同,只是我想看看如何在XAML代码中手动指定每一列。哦,对了。好的。我调整了上面发布的ViewModel代码,以便于简单地复制模型、ViewModel和XAML,并立即在WPF项目中运行。您希望在第二个数据网格中有什么?与第一个自动生成的网格中完全相同,不过我想看看如何在XAML代码中手动指定每一列。好的。我调整了上面发布的ViewModel代码,使其便于简单地复制模型、ViewModel和XAML,并立即在WPF项目中运行。这很有效。我缺少的是
元素。一个新手愚蠢的疏忽。非常感谢。顺便说一句,SO系统中出现了一些跳跃/调整,发布的答案也发生了变化。不管怎样,问题解决了。“我将继续我的发现之旅,直到下一个问题。”艾伦回答根据投票和接受程度重新排列。很高兴你拿到了,很有效。我缺少的是
元素。一个新手愚蠢的疏忽。非常感谢。顺便说一句,SO系统中出现了一些跳跃/调整,发布的答案也发生了变化。不管怎样,问题解决了。“我将继续我的发现之旅,直到下一个问题。”艾伦回答根据投票和接受程度重新排列。很高兴你拿到了。