WPF DataContext网格绑定

WPF DataContext网格绑定,wpf,Wpf,我的XAML中有以下内容 <UserControl.Resources> <vm:StaffViewModel x:Key="StaffViewModel" /> <CollectionViewSource x:Key="StaffViewSource" Source="{Binding StaffMembers}" /> </UserControl.Resources> <Grid x:Name="StaffGri

我的XAML中有以下内容

<UserControl.Resources>
    <vm:StaffViewModel x:Key="StaffViewModel" />
    <CollectionViewSource x:Key="StaffViewSource" Source="{Binding StaffMembers}" />
</UserControl.Resources>

    <Grid x:Name="StaffGrid" DataContext="{StaticResource StaffViewSource}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <Label Content="FirstName:" Grid.Column="0" Grid.Row="0"/>
        <TextBox Grid.Column="1" Grid.Row="0" Text="{Binding FirstName, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
        <Label Content="Surname:" Grid.Row="1" VerticalAlignment="Center"/>
        <TextBox Grid.Column="1" Grid.Row="1" Text="{Binding Surname, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/>
    </Grid>

在我的ViewModel中,我有一个可观察的对象集合,我将其转换为CollectionView

    private ObservableCollection<Staff> _staffMembers = null;
    private ICollectionView _staffMembersView = null;

    public ICollectionView StaffMembers
    {
        get { return _staffMembersView; }
    }


    public StaffView()
    {
        InitializeComponent();

        _staffMembers = GetStaff();
        _staffMembersView = CollectionViewSource.GetDefaultView(_staffMembers);

    }
private-observeCollection\u staffMembers=null;
私有ICollectionView_staffMembersView=null;
公共ICollectionView员工成员
{
获取{return\u staffMembersView;}
}
公共StaffView()
{
初始化组件();
_staffMembers=GetStaff();
_staffMembersView=CollectionViewSource.GetDefaultView(\u staffMembers);
}
但是我的文本框中没有出现任何绑定

我错过了什么

我在过去使用EntityFramework和数据集做过类似的事情。这就是我在那个场合所定义的:-

<UserControl.Resources>
    <local:CantileverDataSet x:Key="CantileverDataSet"/>
    <CollectionViewSource x:Key="CabinetsViewSource" Source="{Binding Cabinets, Source={StaticResource CantileverDataSet}}"/>
</UserControl.Resources>
<Grid DataContext="{StaticResource CabinetsViewSource}">
      <!-- Individual Fields as textboxes here -->
</Grid>

您试图将集合的
集合ViewSource
数据绑定到单个控件,但只能将其绑定到集合控件。请尝试以下方法:

<ListBox ItemsSource="{Binding Source={StaticResource StaffViewSource}}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid x:Name="StaffGrid">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <Label Content="FirstName:" Grid.Column="0" Grid.Row="0" />
                <TextBox Grid.Column="1" Grid.Row="0" Text="{Binding FirstName, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
                <Label Content="Surname:" Grid.Row="1" VerticalAlignment="Center" />
                <TextBox Grid.Column="1" Grid.Row="1" Text="{Binding Surname, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>


您的代码现在定义了集合中的每个项目应该出现的内容。。。我猜这就是你的目标。

hmm,我理解你的意思,尽管你的建议不起作用。我使用E.F和数据集做了类似的事情,见上文。我不确定为什么这种方法有效,但事实并非如此?我在发布代码之前测试了这段代码,它确实有效。我不能告诉你为什么它不适合你。。。你一定有别的东西在干扰它。把它放在一个新的项目中,你会发现它确实有效。