WPF DataGrid没有绑定到集合

时间:2014-07-11 15:11:09

标签: wpf

由于某些原因,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”。

3 个答案:

答案 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没有任何绑定到您的姓氏列的内容,所以我也添加了它。