Каков наилучший способ получить значения из текущей выбранной строки в сетке данных WPF? - PullRequest
0 голосов
/ 01 ноября 2019

Недавно мы решили воссоздать наше приложение Winforms в WPF. В Winforms я получаю значения текущей строки следующим образом:

Dim supplier As String = tbl_outstandingpos.CurrentRow.Cells("Supplier").Value

В WPF лучший способ, который я смог найти, это

DataRowView row = dataGrid.SelectedItem as DataRowView;
MessageBox.Show(row.Row.ItemArray[1].ToString());

, который нене работает для меня, так как я не хочу получать столбец по индексу, но по имени.

Я много читал о MVVM, но до сих пор не вижу того, что дает результаты, которые я ищу.

Я хочу, чтобы пользователь выбрал строку, тогда есть метки / текстовые блокикоторые заполнены значениями из этой строки (некоторые из которых находятся в скрытых столбцах в DataGrid)

Я использую C # для нового приложения, мы использовали VB для winforms.

1 Ответ

1 голос
/ 01 ноября 2019

Учитывая, что DataGrid.ItemsSource является DataTable, SelectedItem будет DataRowView экземпляром. Вы можете получить доступ к выбранной строке по имени столбца, используя соответствующее свойство индексатора:

C #

// Get the value of the selected row's 'LastName' column
var columnValue = (this.MyDataGrid.SelectedItem as DataRowView)["LastName"];
this.MyTextBlock.Text = columnValue;

XAML

<DataGrid x:Name="DataGrid" 
          ItemsSource="{Binding DataTable}" />

<!-- A TextBlock to display the content of the selected rows 'LastName'  column -->
<TextBlock x:Name="MyTextBlock" 
           Text="{Binding ElementName=DataGrid, Path=SelectedItem[LastName]}"/>

Вы можете добавить к своей модели представления выделенное свойство SelectedRow типа DataRowView, вместо того чтобы привязывать элементы управления непосредственно к свойству DataGrid.SelectedItem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...