从文本框读取文本在DataGrid MVVM (wpf databinding)

本文关键字:MVVM wpf databinding DataGrid 文本 读取 取文本 | 更新日期: 2023-09-27 18:07:48

我有行数据网格,其中包含从web服务器读取的数据和值,我想写入web服务器。我在让用户在相应的列中输入数字并单击相邻的文本框时编写值;

    <DataGrid x:Name="datagridDERControl" HorizontalAlignment="Center" VerticalAlignment="Center" Background="#FF322D2D" Height="382" Margin="10,78,10,10" Width="972" ItemsSource="{Binding Path=NFDataSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
        <DataGrid.Columns>
            <DataGridTemplateColumn Width="100" Header="Write Set Point">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Width="100" Text="{Binding Path=WriteSetPoint, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"></TextBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Width="100" Header="Global Trip">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Name="buttonGlobalTrip" Width="100" Click="buttonGlobalTrip_Click"></Button>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid

如何在视图模型中提取每行特定的文本框字符串

从文本框读取文本在DataGrid MVVM (wpf databinding)

如果问题出题者省略了相关细节,那么回答问题总是很困难的。不过,我要试试!

您已经将(假设)一个名为NFDataSource的集合属性绑定到您的DataGrid.ItemsSource属性。这是代表DataGrid中数据的集合,因此要"提取"特定值,您需要查看集合中的数据项。

DataGrid类中一个方便的属性是SelectedItem属性。这使您能够将一个对象(与NFDataSource集合中的对象类型相同)数据绑定到此属性,该属性访问当前在UI中选择的行后面的数据对象:

<DataGrid ItemsSource="{Binding NFDataSource}" SelectedItem="{Binding SelectedItem}" />

现在您可以使用SelectedItem属性来访问DataGrid中选定行的值:

string someValue = SelectedItem.SomeProperty;

当您用MVVM和databinding标记它时,我假设您正在使用这些并且刚刚弄混了。

"我有一个包含从web服务器读取数据的行数据网格和我想写入web服务器的值。"

所以你的视图模型有一个属性,它是一个自定义类的集合,它表示从web服务器获取的数据。

"我写值让用户输入一个数字到并单击相邻的文本框"

"

所以这个VM属性是双向绑定到数据网格的,所以集合中的每个项目代表"一行",而这些项目上的属性代表你的"列"。用户可以更改UI显示的值,并且由于双向数据绑定,虚拟机属性也被更新。

"我如何提取特定的文本框字符串每行使用在我的视图模型。"

为什么你需要特定的文本框字符串,如果它是绑定到一个属性(或更确切地说一个属性包含在一个集合中的类)在你的VM ?如果您以这种方式设置了VM,并且正在使用数据绑定,那么您很少需要担心特定于UI的事情,例如单击数据网格中的哪一行。

正如Sheridan指出的那样,您还可以绑定到数据网格上的属性,例如SelectedItem,以便您可以执行除了读取/写入数据之外的其他操作。数据网格的SelectedItem将是填充VM集合的类型,因此将具有适当的属性。

例如,如果您的VM集合是IQueryable<Person>,并且绑定到数据网格的ItemsSource,那么SelectedItem将是Person类型。然后你可以有一个名为SelectedPerson的VM属性它与SelectedItem绑定,并访问SelectedPerson.Name