2010-07-28 2 views
0

저는 현재 C# WPF의 목록 상자에 XML 파일을 바인딩하고 있습니다. itemtemplate 내에서 컨트롤을 추가했습니다. 다음과 같이 a를 playButton으로는 내가 예를 들어, 그 ListBoxItem의에서 텍스트 블록의 텍스트를 다른 속성을 액세서하려면 클릭 이제 다른 목록 상자 항목 컨트롤 및 버튼 클릭시 속성에 액세스

<DataTemplate x:Key="SinglecueTemplate"> 
      <Grid Height="30" Width="425" Margin="3,3,0,3"> 
       <Button Content="{Binding XPath=nr}" Width="30" Style="{DynamicResource CUEStyle_Button_Inhoudknopje}" Template="{DynamicResource CUEStyle_singlecueknopnummer}" Height="Auto" HorizontalAlignment="Left" Background="#FFABCCED" Foreground="White" IsEnabled="False"/> 
       <TextBlock x:Name="name" Margin="54,0,114.667,0" Width="Auto" VerticalAlignment="Center" FontSize="16" Foreground="Gray" Text="{Binding XPath=Name}"/> 
       <Button x:Name="playbutton" Width="30" Style="{DynamicResource CUEStyle_Button_Groot}" Template="{DynamicResource CUEStyle_Rondknopje}" Height="Auto" HorizontalAlignment="Right" Margin="0,0.55,74.737,-0.55" Content="u" FontFamily="Wingdings 3" Foreground="#FF0178D3" Opacity="1" BorderBrush="#FF0178D3" Click="playcue"/> 
       <Button Width="30" Style="{DynamicResource CUEStyle_Button_Groot}" Template="{DynamicResource CUEStyle_Rondknopje}" Height="Auto" HorizontalAlignment="Right" Margin="0,0.55,37.071,-0.55" Content="¢" FontFamily="Wingdings 2" Foreground="Gray" Opacity="0.4"/> 
       <Button Width="15" Style="{DynamicResource CUEStyle_Button_Groot}" Template="{DynamicResource CUEStyle_kleinloopje}" Height="15" HorizontalAlignment="Left" Margin="15,0,0,-5.5" Content="Q" FontFamily="Wingdings 3" Foreground="White" FontWeight="Bold" FontSize="10.667" Opacity="1" VerticalAlignment="Bottom" BorderBrush="{x:Null}" Background="{x:Null}" IsEnabled="{Binding XPath=Loop}"/> 
       <TextBlock Margin="0,0,114.667,0" Width="81.07" VerticalAlignment="Center" FontSize="16" Foreground="Gray" Text="03:02:11" HorizontalAlignment="Right"/> 
      </Grid> 
     </DataTemplate> 

. 나는이 작업을 수행하는 방법에 고개를 다음과 함께했다 :

  private void playcue(object sender, System.Windows.RoutedEventArgs e) 
      { 
       Button playcue = (Button)sender; 
       Textbox titel = (Textbox)playcue.DataContext; 
       MessageBox.Show(titel); 
      } 

그러나 위의 코드는 나에게 형 텍스트 상자를 알 수 없다는 오류를 제공합니다. 템플릿 내의 다른 항목에 액세스 할 수 있도록 데이터 템플릿을 사용하여 무언가를해야합니까? 또는 데이터 소스에서 형제 노드에 액세스 할 수 있습니까?

UPDATE

답변 발견했다. 이제 나중에 참조 : 항목에서

private void playcue(object sender, System.Windows.RoutedEventArgs e) 
      { 
       Button playcue = (Button)sender; 
       XmlElement name = (XmlElement)playcue.DataContext; 
       MessageBox.Show(name.InnerText); 

      } 

반환 모든 형제 자매 값을

당신은 당신이 그렇게 할 수있는 특정 형제에 액세스하려면 :

MessageBox.Show(name.SelectSingleNode("Name").InnerXml); 

답변

1

첫 번째 문제는 TextBox 아니라고이다 Textbox (C#은 대소 문자를 구분합니다.)

두 번째로 DataContextTextBox. ItemsSource 컬렉션의 항목이어야합니다. 따라서 사용자가 목록의 세 번째 버튼을 클릭하면 ItemsSource 컬렉션의 세 번째 항목을 확인해야합니다. XML을 데이터 소스로 사용하고있는 것으로 보아서 항목이 XElement 또는 XmlElement이어야한다고 생각합니다.

난 다음에 Textbox titel = (Textbox)playcue.DataContext;를 변경 제안 :

XElement element = (XElement)playcue.DataContext; 

또는

XmlElement element = (XmlElement)playcue.DataContext; 

당신은 또한 당신의 MessageBox 문을 변경해야합니다.