我已经看了几个小时了,但我无法弄清楚... 我已经将“问题”成功绑定到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显示的。
图片以供进一步说明:
如您所见,这些不是QuestionVM的属性,而是主要数据上下文。它不想从我设置为ItemsSource的ObservableCollection中选择属性。
答案 0 :(得分:-2)
更新的答案
如果某个对象未出现在Intellisense中,则可能是由于创建该对象的名称空间所致。 确保在同一名称空间中声明对象,或尝试将对象Question的名称空间添加到视图中。
将名称空间添加到视图的示例
xmlns:helper="clr-namespace:Mynamespace.Myclass"
此外,看来viewmodel还没有实现INotifyPropertyChanged接口,该接口用于在绑定属性更新时通知控件的视图。
结局