как получить доступ к метке внутри таблицы данных - PullRequest
0 голосов
/ 23 марта 2012

Привет всем, у меня есть список, в котором есть табличка с данными. Внутри это флажок, текстовое поле, метка ... Что мне нужно, чтобы получить значение метки, когда флажок снят?или любой другой способ доступа к значению метки, но только если флажок снят ............ Пожалуйста, помогите мне.код как

<ListBox.ItemTemplate>                                                    
    <DataTemplate>
        <StackPanel Name="sp" Orientation="Horizontal" Margin="3,3,3,3" >                                                       
            <CheckBox Name="chkSubject"   IsChecked="{Binding RelativeSource{RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" VerticalAlignment="Center"  Margin="0,0,4,0" Unchecked="chkSubject_Unchecked">
                <TextBlock FontSize="11" Text="{Binding subject_name}" />
            </CheckBox>
            <Label Name="lbl_idOfSub" Content="{Binding subject_id}" Visibility="Visible">
            </Label>
        </StackPanel>
     </DataTemplate>
</ListBox.ItemTemplate>

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Поскольку вы используете привязку к метке, я бы пошел для доступа к subject_id из объекта, который описывает шаблон данных. Как это:

var subjectId = dataBoundItem.subject_id;

Это правильный путь с MVVM и привязками.

UPDATE:

Вот основной подход MVVM к решению этой проблемы. Прежде всего, я немного очистил ваше объявление списка и добавил триггер, который устанавливает привязку IsSelected:

    <ListBox ItemsSource="{Binding}">
        <ListBox.Resources>
            <Style TargetType="{x:Type ListBoxItem}">
                <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
            </Style>
        </ListBox.Resources>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Name="sp" Orientation="Horizontal" Margin="3,3,3,3" >
                    <CheckBox Name="chkSubject"   IsChecked="{Binding IsSelected}" VerticalAlignment="Center"  Margin="0,0,4,0" Unchecked="chkSubject_Unchecked_1">
                        <TextBlock FontSize="11" Text="{Binding SubjectName}" />
                    </CheckBox>
                    <Label Name="lbl_idOfSub" Content="{Binding SubjectId}" Visibility="Visible"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

Здесь, всякий раз, когда значение IsSelected для отдельного ListBoxItem изменяется, привязка «IsSelected» viewModel изменяется. Вот модель:

public class SelectableItem : INotifyPropertyChanged
{
    private string _subjectId;
    private bool _isSelected;
    private string _subjectName;

    public string SubjectId
    {
        get { return _subjectId; }
        set { _subjectId = value; OnPropertyChanged("SubjectId"); }
    }

    public bool IsSelected
    {
        get { return _isSelected; }
        set { _isSelected = value; OnPropertyChanged("IsSelected"); }
    }

    public string SubjectName
    {
        get { return _subjectName; }
        set { _subjectName = value; OnPropertyChanged("SubjectName"); }
    }
    // .. INotifyPropertyChangedImplementation

Ваш IsSelected будет установлен в true, когда выбран соответствующий элемент, и в false, если он не выбран. Вы можете поместить свой код в элемент «set» свойства «IsSelected» и проверить (value == false) и выполнить необходимый фрагмент кода по своему усмотрению. Это был бы подход MVVM к этому вопросу.

Используя событие, вы можете сделать следующее:

    private void chkSubject_Unchecked_1(object sender, RoutedEventArgs e)
    {
        FrameworkElement control = sender as FrameworkElement;
        if (control == null)
            return;

        SelectableItem item = control.DataContext as SelectableItem;
        if (item == null)
            return;

        string yourValue = item.SubjectId;
    }

Я настоятельно рекомендую вам прочитать о MVVM и привязках.

0 голосов
/ 23 марта 2012

Как насчет использования событий Checked и UnChecked вашего CheckBox, чтобы вы могли извлечь значение subject_id, которое привязано к вашей метке.

...