由于某些原因,WPF UserControl中包含的DataGrid未绑定到集合。它总是只带有标题,并且没有添加内容的任何行。
Users.xaml.cs:
public partial class Users : UserControl
{
private ObservableCollection<UserViewModel> _userViewModels;
public ObservableCollection<UserViewModel> UserViewModels
{
get { return _userViewModels; }
set { _userViewModels = value; }
}
public Users()
{
InitializeComponent();
PopulateUsers();
}
private void PopulateUsers()
{
_userViewModels = new ObservableCollection<UserViewModel>()
{
new UserViewModel() { FirstName = "Mary", LastName = "Doe"},
new UserViewModel() { FirstName = "John", LastName = "Doe"}
};
this.DataContext = _userViewModels;
}
}
Users.xaml:
<UserControl x:Class="Users.Views.Users"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<DataGrid ItemsSource="{Binding Source=UserViewModels}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"></DataGridTextColumn>
<DataGridTextColumn Header="Last Name"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</UserControl>
任何人都可以注意到我遗失的任何东西吗?
更新1:
我将XAML代码更新为以下内容:
<DataGrid ItemsSource="{Binding Source=UserViewModels}" AutoGenerateColumns="False">
现在,我可以看到DataGrid,但它没有任何值。这一切都是空的!即使我填充两个字段“FirstName”和“LastName”。
答案 0 :(得分:1)
你做错了。此外,如果您有ViewModel
,绑定会更有用。
第一次没有工作的原因是因为您尝试将整个视图设置为DataContext
。因此,绑定试图在UserViewModels
内寻找UserViewModels
的属性。
更改
this.DataContext = _userViewModels;
到
this.DataContext = this;
并将绑定放回原来的
ItemsSource="{Binding UserViewModels}"
答案 1 :(得分:0)
将ItemsSource
绑定更改为
ItemsSource="{Binding}"
DataContext
,对于整个UserControl
,已经设置为您的收藏
this.DataContext = _userViewModels
所以您需要做的就是将ItemsSource
绑定到当前DataContext
答案 2 :(得分:0)
您需要更新绑定并设置UserControl的DataContext。这可以在xaml中严格完成,如下所示。
<强> XAML:强>
<UserControl x:Class="Users.Views.Users"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<DataGrid ItemsSource="{Binding UserViewModels}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"/>
<DataGridTextColumn Header="Last Name" Binding="{Binding LastName}"/>
</DataGrid.Columns>
</DataGrid>
</UserControl>
并删除此行:
this.DataContext = _userViewModels;
上面的代码会将UserControl的当前DataContext设置为自身。应用此选项后,您可以相应地绑定,如上所示。请注意,您的XAML没有任何绑定到您的姓氏列的内容,所以我也添加了它。