WPF DataGrid无法从ItemsSource绑定

时间:2018-10-18 19:43:16

标签: c# wpf data-binding datagrid

我已经看了几个小时了,但我无法弄清楚... 我已经将“问题”成功绑定到ItemsSource。问题是一个包含QuestionVM对象的ObservableCollection。

由于某些原因,带有“问题”标题的“文本列”无法绑定到“问题”中的“问题”属性。

    <DataGrid ItemsSource="{Binding Questions}" AutoGenerateColumns="False" SelectedItem="{Binding SelectedQuestion, Mode=TwoWay}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Question" Binding="{Binding Question}" Width="*"/>
            <DataGridTemplateColumn Width="100">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Content="Delete"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTemplateColumn Width="100">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Content="Edit"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

这是带有属性的QuestionVM类的一部分。

public class QuestionVM
{
    private Question _question;
    public string Question { get { return _question.Question1; } set { _question.Question1 = value; } }
    public string Category { get { return _question.Category; } set { _question.Category = value; } }
    public ObservableCollection<AnswerVM> Answers { get; set; }
}

我应该能够绑定Question属性,对吗?为什么我不能这样做?

编辑: Intellisense仅显示主数据上下文的属性,而不显示Questions ObservableCollection内部的单个QuestionVM的属性。

        DataContext="{Binding ExistingQuestions, Source={StaticResource Locator}}

ExistingQuestions包含属性Questions,SelectedQuestion和AddQuestion。这些是Intellisense显示的。

图片以供进一步说明:

Attempting to bind..

如您所见,这些不是QuestionVM的属性,而是主要数据上下文。它不想从我设置为ItemsSource的ObservableCollection中选择属性。

Properties of main data context.

I am trying to bind this property which is inside the QuestionVM.

1 个答案:

答案 0 :(得分:-2)

更新的答案

如果某个对象未出现在Intellisense中,则可能是由于创建该对象的名称空间所致。 确保在同一名称空间中声明对象,或尝试将对象Question的名称空间添加到视图中。

将名称空间添加到视图的示例

xmlns:helper="clr-namespace:Mynamespace.Myclass"

此外,看来viewmodel还没有实现INotifyPropertyChanged接口,该接口用于在绑定属性更新时通知控件的视图。

结局