【发布时间】:2016-12-08 19:16:02
【问题描述】:
我正在尝试从其中包含 2 个其他列表的列表中绑定属性,但由于某种原因,它不会在我的数据网格上显示任何内容。
正如您在下面看到的,我创建了一个 observableCollection,当我调试时,该列表具有所有必需的属性(我试图在 XAML 绑定部分添加的属性)但由于某种原因它不起作用。
初始化数据网格的类
private CategoryServiceClient quizClient = new CategoryServiceClient();
private IList<Category> quizList;
public QuizWindow()
{
InitializeComponent();
LoadUserData();
}
private void LoadUserData()
{
// The GetCategoriesQuestionAnswers method has a list of categories with a
// list of questions and a list of answers
quizList = new ObservableCollection<Category>(quizClient.GetCategoriesQuestionsAnswers());
try
{
quizDatagrid.ItemsSource = quizList;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
throw;
}
}
XAML
<DataGrid x:Name="quizDatagrid" CanUserAddRows="False" Margin="10,90,0,10" ClipboardCopyMode="None" AutoGenerateColumns="False" HorizontalAlignment="Left" Width="698">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding id}" Header="Category ID" />
<DataGridTextColumn Binding="{Binding name}" Header="Category Name" />
<DataGridTextColumn Binding="{Binding category.question.id}" Header="Question ID" />
<DataGridTextColumn Binding="{Binding category.question.description}" Header="Question Description" />
<DataGridTextColumn Binding="{Binding category.question.answer.id}" Header="Answer ID" />
<DataGridTextColumn Binding="{Binding category.question.answer.description}" Header="Answer Description" />
<DataGridTextColumn Binding="{Binding category.question.answer.isCorrect}" Header="Is Correct" />
<DataGridTextColumn Binding="{Binding category.question.answer.pointAmount}" Header="Point Amount" />
</DataGrid.Columns>
</DataGrid>
这是类别类
public class Category
{
[DataMember]
public int id { get; set; }
[DataMember]
public string name { get; set; }
[DataMember]
public int amount { get; set; }
[DataMember]
public Quiz quiz { get; set; }
[DataMember]
public List<Question> question { get; set; }
public Category()
{
question = new List<Question>();
}
}
这是我的问题课
[DataContract(IsReference = true)]
public class Question
{
[DataMember]
public int id { get; set; }
[DataMember]
public string description { get; set; }
[DataMember]
public Category category { get; set; }
[DataMember]
public bool isAnswered { get; set; }
[DataMember]
public List<Answer> Answers { get; set; }
public Question()
{
Answers = new List<Answer>();
}
}
【问题讨论】:
-
您的
Category班级是什么样的?我猜它没有id或category.question.id的有效属性 -
我添加了 Category 类,amount 并且 Quiz 没有在任何地方使用,所以忽略它:)
-
哦,顺便说一句,“id”和“name”绑定有效,它们显示类别 ID 和类别名称
-
如果你在代码中写
quizList[0].category.question.id,你当然会看到编译器抛出错误。因为Category不包含名为category的属性,而List<Question>不包含名为id 的属性。您需要绑定与代码中的完全匹配...因此您可以为id编写绑定,因为quizList[0].id是有效的。或者绑定quiz.id,因为quizList[0].quiz.id是有效的。你现在看到问题了吗? -
感谢您的回答,我正在努力理解它,但您是对的,问题[0].description 对我有用,但是当我尝试时,所有行的 ID 都是 0:问题 [ 0].id ,猜我在某处犯了错误。我试图一遍又一遍地分析你在说什么:P