[英]Why is my ListView not binding to the ItemSource?
所以我有一个非常简单的UI设计,带有ListView和一个按钮。 我想在点击按钮时填充列表视图。
<Grid>
<Button Click="ButtonBase_OnClick" Content="Button" HorizontalAlignment="Left" Margin="349,259,0,0" VerticalAlignment="Top" Width="75"/>
<ListView Margin="10,10,10,202" Name="lvUsers" ItemsSource="{Binding SomeData.Users}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
我已绑定ListView控件的属性的ItemSource是SomeData.Users
这是一个ObservableCollectiuon时,它的更新,应通知用户界面,添加,删除或更新。 然后在我有列的下面我将DisplayMember绑定到observable集合的Name
属性。
这是SomeData
类
public class SomeData
{
public static ObservableCollection<User> Users { get; } = new ObservableCollection<User>();
public static void Populate()
{
Users.Add(new User() { Name = "John Doe", Age = 42, Mail = "john@doe-family.com" });
Users.Add(new User() { Name = "Jane Doe", Age = 39, Mail = "jane@doe-family.com" });
Users.Add(new User() { Name = "Sammy Doe", Age = 7, Mail = "sammy.doe@gmail.com" });
}
}
public class User
{
public string Name { get; set; }
public int Age { get; set; }
public string Mail { get; set; }
}
这是MainWindow.cs
public MainWindow()
{
InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
SomeData.Populate();
}
afaik我不应该在任何地方设置DataContext ..对吗?
问题是您的Binding语法错误。 您正在尝试绑定到静态属性,请尝试以下操作:
"{Binding Source={x:Static YourNameSpace:SomeData.Users}}"
或者,如果您使用的是WPF 4.5或更高版本:
"{Binding Path=(YourNameSpace:SomeData.Users)}"
一个提示:像你这样的问题总是试着看看你的输出窗口并查找System.Window.Data Error
,这些通常是绑定表达式无法解析时发生的绑定异常。 在你的情况下,我相信你会发现这个例外。
您必须为xaml设置DataContext。
将datacontext添加到mainwindow
public MainWindow()
{
InitializeComponent();
this.DataContext = new SomeData();
}
并将xaml ItemsSource绑定更改为
ItemsSource="{Binding Users}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.