将数据网格项绑定到文本框

本文关键字:文本 绑定 数据 数据网 网格 | 更新日期: 2023-09-27 18:11:12

我尝试将数据网格中的选定项绑定到一些文本框。遗憾的是,文本框不会随着更改而更新。

如果你需要更多的信息,请尽管问。

在我看来,我试图将数据网格的选定项的数据绑定到文本框。在文本框中可以有您想要添加的新员工或您想要编辑的数据网格之一。

    <TextBox Name="TxtName" Text="{Binding Employee.LastName}" Grid.Column="1" Grid.Row="0"></TextBox>
    <TextBox Name="TxtFirstName" Text="{Binding Employee.FirstName}"  Grid.Column="3" Grid.Row="0"></TextBox>
    <TextBox Name="TxtDateOfBirth" Text="{Binding Employee.DateOfBirth, StringFormat=d}" Grid.Column="1" Grid.Row="1"></TextBox>
    <ComboBox Name="CmbGender" SelectedItem="{Binding Employee.Gender}" ItemsSource="{Binding Genders}" DisplayMemberPath="Short" Grid.Column="3" Grid.Row="1"/>

    <DataGrid Name="GrdAllEmployees" ItemsSource="{Binding Employees}" SelectedItem="{Binding SelectedEmployee}" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="4" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" CanUserSortColumns="False">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <i:InvokeCommandAction Command="{Binding SelectionChanged}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </DataGrid>

在我的ViewModel中,我将所选雇员的值设置为显示在文本框中的雇员,并引发两者的事件。

        public Employee SelectedEmployee
        {
            get { return _selectedEmployee; }
            set
            {
                _selectedEmployee = value;
                NotifyPropertyChanged("SelectedEmployee");
                _employee = _selectedEmployee;
                NotifyPropertyChanged("Employee");
            }
        }

在此之后的调试中,这些值是正确的。但是视图不会被更新

将数据网格项绑定到文本框

有一种更简单的方法来显示DataGrid或WPF中任何集合控件的选定项的值。那就是利用Selector.IsSynchronizedWithCurrentItem的性质。当您将此设置为true时,您可以使用/符号从该集合中引用所选项目,这意味着当前项目。试试这样做:

<StackPanel>
    <DataGrid ItemsSource="{Binding Employees}" IsSynchronizedWithCurrentItem="True" />
    <TextBlock Text="{Binding Employees/Name}" />
</StackPanel>

这将显示DataGrid中当前选定项的Name属性值。进一步的信息…从MSDN上的Binding.Path属性页:

当源是集合视图时,可以使用斜杠(/)指定当前项。例如,子句Path=/将绑定设置为视图中的当前项。当源是集合时,此语法指定默认集合视图的当前项。

属性名和斜杠可以组合起来遍历作为集合的属性。例如,Path=/Offices/ManagerName指定源集合的当前项,其中包含一个office属性,该属性也是一个集合。当前项是一个包含ManagerName属性的对象。

在我用MVVMlight的类替换了RelayCommand和ViewModelBase的类后,它为我工作了,我从nuget下载了。

https://mvvmlight.codeplex.com/

我只需要改变NotifyPropertyChanged与RaisePropertyChanged。

但也要感谢@Sheridan的建议