【发布时间】:2016-01-18 22:35:37
【问题描述】:
所以我有一个类Question,其属性@Question 和Answer 是一个字符串,我想将它绑定到一个Listview 以便当我说时
lv.ItemsSource = AllQuestions; //lv being the listview and AllQuestions being a List<Quesiton>
在 XAML 中
<ListView x:Name="lv" HorizontalAlignment="Left" Height="310" Margin="0,10,0,0" VerticalAlignment="Top" Width="225" SelectionChanged="lv_SelectionChanged">
<ListView.View>
<GridView>
<GridViewColumn Header="Questions" Width="225" DisplayMemberBinding="{Binding Question}"/>
</GridView>
</ListView.View>
它显示了@Question 属性。例如,如果我有
AllQuestions.Add(new Question { Quesiton = "why", Answer = 'a'});
lv.ItemsSource = AllQuestions;
列表视图将显示why,但它只显示空白。我注意到,当我将DisplayMemberBinding="{Binding Question}" 更改为DisplayMemberBinding="{Binding Answer}" 时,它会正确显示a。
如果有帮助,这里是我的问题类的代码:
public class Question
{
public string @Question { get; set; }
public char Answer { get; set; }
}
总而言之,我想知道的是如何显示@Question 属性以及为什么当我有DisplayMemberBinding="{Binding Question}" 时它会显示空白
【问题讨论】:
-
我什至无法编译您的代码。即使使用
@,我也得到了 CS0542。您使用的是什么版本的编译器?也就是说,这里的基本问题是你的类命名错误。如果该类型同时具有“问题”和“答案”,则“问题”是该类的错误名称。或者,如果您认为“问题”是带有“答案”和其他内容的东西,那么“问题”就是该属性的错误名称。 “问题”不可能是类和属性的正确名称。解决这个问题,其他问题就会消失。 -
你为什么不重命名你的类或属性?我尝试运行您的代码并收到以下错误:“成员名称不能与其封闭类型相同”。我在类定义和 xaml 中将属性名称更改为
Question1,然后一切正常。请参阅此答案以了解为什么您不能为属性和类提供相同的名称:stackoverflow.com/a/10070727/692829 -
@lena @PeterDuniho 感谢您的回复。显然你们的建议有效,但是我仍然坐在这里想知道为什么我的代码甚至首先编译。我刚刚运行程序,它运行良好,然后将
Question更改为Question1并且它运行,然后将它改回Question,它没有运行。无论如何,如果你们中的任何一个人想发表你的答案,那么我给你信用/让这篇文章得到回答,那将是一件好事。
标签: c# wpf data-binding