Wpf 属性名称不可用于我的datagrid列绑定
刚刚开始学习WPF XAML中的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
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系统中出现了一些跳跃/调整,发布的答案也发生了变化。不管怎样,问题解决了。“我将继续我的发现之旅,直到下一个问题。”艾伦回答根据投票和接受程度重新排列。很高兴你拿到了。