【问题标题】:Binding Listview to property with same name as class将 Listview 绑定到与类同名的属性
【发布时间】:2016-01-18 22:35:37
【问题描述】:

所以我有一个类Question,其属性@QuestionAnswer 是一个字符串,我想将它绑定到一个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


【解决方案1】:

根据MSDN,你不能有与类同名的类成员。

类或结构的成员不能与类或结构同名,除非该成员是构造函数。

如果您无意中将返回类型放在构造函数上,可能会导致错误 CS0542,这实际上使其成为普通方法。

您需要重命名您的类或属性,并且不要忘记相应地更改 xaml 文件。

【讨论】:

    猜你喜欢
    • 2018-10-24
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2012-06-07
    相关资源
    最近更新 更多