2012-03-23 64 views
0

大家好我有一個列表框,其中是一個datatemplate.Inside它是複選框,文本框,標籤...我想要的Wat是獲得標籤的價值複選框未選中?或者任何關於如何訪問標籤值的選擇,但只有當複選框未被選中時............請幫助我。 代碼爲如何訪問datatemplate內的標籤

<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> 

回答

1

由於您使用的標籤綁定,我會去從DataTemplate中被描述的對象訪問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」視圖模型的結合改變。這裏的模型:

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將被設置爲真,假,只要它是不選。您可以將代碼放入「IsSelected」屬性的「set」項中,並檢查(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

謝謝。 Byways wat你的意思是由dataBoundItem.can你請給我一個可行的解決方案我的問題因爲我堅持在這一點上。我想要的是複選框得到取消選中我想要的標籤中的值。 – rohit 2012-03-23 08:35:56

+0

不客氣:) 發佈瞭解決方案的更新。 – 2012-03-23 19:02:45

+0

謝謝德米特里爲你提供的幫助,這非常有用....肯定會閱讀它..... :) – rohit 2012-03-25 06:42:18

0

如何使用CheckBox的CheckedUnChecked事件,以便您可以檢索綁定到您的標籤的subject_id的值。