从DataGrid MVVM中的TextBox读取文本(wpf数据绑定)

时间:2014-06-09 09:09:54

标签: c# wpf data-binding mvvm datagrid

我有一个行数据网格,其中包含从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

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

2 个答案:

答案 0 :(得分:1)

总是很难回答问题作者遗漏相关细节的问题。但是,我会尝试!

您的数据(可能是)绑定到NFDataSource属性的名为DataGrid.ItemsSource的集合属性。这是代表DataGrid中数据的集合,因此要“提取”特定值,您需要查看集合中的数据项。

DataGrid课程中的一个便利属性是SelectedItem property。这使您可以将对象(与NFDataSource集合中的对象类型相同)的数据绑定到此属性,该属性访问UI中当前所选行的后面的数据对象:

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

现在,您可以利用SelectedItem属性访问DataGrid中所选行的值:

string someValue = SelectedItem.SomeProperty;

答案 1 :(得分:0)

当您使用MVVM和数据绑定标记此内容时,我会假设您正在使用这些并且已经混淆了。

  

“我有一个行数据网格,其中包含从Web服务器读取的数据   和值我想写入网络服务器。“

因此,您的viewmodel有一个属性,它是一个自定义类的集合,表示从Web服务器获取的数据。

  

“我写这些值是为了让用户输入一个数字   适当的列,然后单击相邻的文本框“

因此,此VM属性是双向绑定到数据网格,因此集合中的每个项目都代表“一行”,这些项目的属性代表您的“列”。用户可以更改UI显示的值,并且由于双向数据绑定,VM属性也会更新。

  

“如何在每行中提取特定的文本框字符串   查看模型。“

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

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

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