从文本框读取文本在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
如何在视图模型中提取每行特定的文本框字符串
如果问题出题者省略了相关细节,那么回答问题总是很困难的。不过,我要试试!
您已经将(假设)一个名为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
等