Получить значения SelectedItem в wpf - PullRequest
0 голосов
/ 11 февраля 2012

У меня есть ListBox на странице WPF, каждый элемент которого состоит из двух меток.Я назначил им имена FirstName, LastName:

<ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Name="FirstName" Text="{Binding FirstName}" Margin="0,0,10,0"/>
                <TextBlock Grid.Column="1" Name="LastName" Text="{Binding LastName}" HorizontalAlignment="Left"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>

Когда пользователь выбирает элемент списка, я хочу сохранить их значения отдельно, чтобы передать их на другую страницу.Я пытаюсь с этой целью в коде за кодом:

 ListItemCollection lbi = List1.SelectedItem as ListItemCollection;

        string first = lbi.FirstListItem.DataContext.ToString();
        string last = lbi.LastListItem.DataContext.ToString();

Однако я получаю исключение nullReferenceException при определении строк?Что не так на этом пути?Как я могу получить значения SelectedItem?

Обновление: Значения привязки являются производными от SQLAdapter с запросом SQL.Смотрите код позади:

SqlDataAdapter dAdapt1 = new SqlDataAdapter(sqlStr1, cnStr);

        DataSet dataSet1 = new DataSet();
        dAdapt1.Fill(dataSet1);

        List1.DataContext = dataSet1.Tables[0];

Ответы [ 2 ]

3 голосов
/ 11 февраля 2012

DataTable и ListBox ##

myDataSet.BookTable.firstColumn и lastColumn.

переплет готовначало

3.XAML

<ListBox ItemsSource="{Binding Path=BookTable}"  

4.Window.Resources>

<DataTemplate x:Key="BookItemTemplate">
                <Grid>
  <TextBlock Text="{Binding Path=first}" Grid.Column="0"/> 
  <TextBlock Text="{Binding Path=last}" Grid.Column="1" /> 

5.

ItemTemplate ="{StaticResource BookItemTemplate}"/>

конец переплета

6.

DataRowView d1=List1.SelectedItem as DataRowView;
string first =d1["first"].tostring();
string last =d1["last"].tostring();
2 голосов
/ 11 февраля 2012

Как уже прокомментировал Энди, List1.SelectedItem не является ListItemCollection, поэтому вы не можете использовать этот тип, поэтому lbi - это null.

В шаблоне данных вы привязываете свойства FirstName и LastName. Должен быть класс, который определяет эти свойства, назовем его Person.

Полагаю следующее, потому что вы этого не показали. Вы связываете ItemSource ListBox с коллекцией Person объектов, предоставленных некоторым свойством объекта, которое возвращается dataSet1.Tables[0] (потому что вы устанавливаете List1.DataContext в это значение).

Итак, что вам нужно написать, чтобы получить выбранный предмет, это:

Person lbi = List1.SelectedItems as Person;

и замените Person на тот тип, который действительно присутствует в вашем приложении.

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