我花了几天时间没有自己解决这个问题,这使我相信我不了解xaml和代码隐藏的基本内容。我试图使用WPF和c#在ListView中显示来自ObservableCollection的数据。
当我开始调试时,窗口会显示列表视图,其中包含网格和标题。可点击的行等于应该存在的项目数,但这些项目显示为空白或空白。我正在研究一个不完整的教程,试图通过这个来学习我的方法,代码如下:
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
NameList.cs:
class NameList : ObservableCollection<PersonName>
{
public NameList()
: base()
{
Add(new PersonName("Willa", "Cather")); //enumerated? (firstName, lastName)
Add(new PersonName("Isak", "Dinesen"));
Add(new PersonName("Victor", "Hugo"));
Add(new PersonName("Jules", "Verne"));
}
}
PersonName.cs:
class PersonName
{
private string firstname;
private string lastname;
public PersonName(string first, string last)
{
this.firstname = first;
this.lastname = last;
}
public string FirstName { get; set; }
public string LastName { get; set; }
}
我会包含xaml,但我还没有在这里的问题中弄清楚如何做到这一点,所以我会尽力拼出来:
ListView ItemsSource=""{Binding Source={StaticResource NameListData}}"
GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}"
GridViewColumn DisplayMemberBinding="{Binding Path=LastName}"
我只列出了实际的绑定,我并不认为布局信息太重要了,但请告诉我这个假设是否错误。
答案 0 :(得分:5)
您为私人字段
分配值this.firstname
但绑定到属性
public string FirstName { get; set; }
这应该有效
public PersonName(string first, string last)
{
this.Firstname = first;
this.Lastname = last;
}
答案 1 :(得分:2)
您的MainWindow需要一个包含数据的属性,以便绑定到
public partial class MainWindow : Window
{
private NameList _nameList;
public NameList NameList
{
get { return _nameList; }
set
{
if (_nameList != value)
{
_nameList = value;
}
}
}
public MainWindow ()
{
InitializeComponent();
NameList = new NameList();
}
}
您的PersonName类需要分配属性(而不是成员),以便您可以绑定它们:
public class PersonName
{
public PersonName(string first, string last)
{
FirstName = first;
LastName = last;
}
public string FirstName { get; set; }
public string LastName { get; set; }
}
在您的XAML中,您可以这样绑定:
<ListView ItemsSource="{Binding NameList}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding LastName}" /><Run Text=", " /><Run Text="{Binding FirstName}" />
</TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
所以你的结果会是这样的:
答案 2 :(得分:0)
所以我只是想通了,@LPL引发了一丝理解。
当我声明我的属性时,我没有将get和set值设置为私有字符串,所以当绑定调用它们时,它知道存在四个项目,但它们是空项目。现在功能代码如下所示:
public string FirstName
{
get {return firstname; }
set{ firstname=value; }
}
具有LastName的等效属性。欢迎简单的问题成为巨大的麻烦。