2012-04-22 4 views
-1

다음 XAML을 사용하여 <TextBlock/SenderName> 또는 목록보기 현재 선택된 항목에 따라 스택 패널에 중첩 된 다른 컨트롤을 가져 오는 방법은 무엇입니까? C#을ListView에서 값 가져 오기

XAML

<ListView x:Name="ItemListView" 
     ItemsSource="{Binding}" 
     Margin="1041,120,85,68" SelectionChanged="ListView1_SelectionChanged"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding SenderName}" 
        FontSize="20" Margin="15,0,0,0" HorizontalAlignment="Right" /> 
       <TextBlock Text="{Binding Value}" 
        FontSize="18" Margin="5,0,0,0" TextWrapping="Wrap" HorizontalAlignment="Right" /> 
       <TextBlock Visibility="Collapsed" Text="{Binding StreamId}" /> 
       <TextBlock Text="{Binding DateTime}" 
        FontSize="16" Margin="15,0,0,0" HorizontalAlignment="Right" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

답변

2

당신이 다음 MVVM 접근 방식을 사용하는 경우 귀하의 ListView의 ItemsSource가 당신의 ViewModel의 속성에 바인딩됩니다. ListBox의 SelectedItem에서 값에 액세스하려면 SelectedItem을 뷰 모델의 다른 멤버에 바인딩합니다. 뭔가 같이 :

코드 :

public class ViewModel 
{ 
    public ObservableCollection<MyListViewItem> Items {get;set;} 
    public MyListViewItem SelectedListItem {get;set;} 
} 

XAML :해야하는

<ListView DataContext="{Binding Path=myViewModel}" 
    ItemsSource="{Binding Path=Items}" 
    SelectedItem="{Binding Path=SelectedListItem}" /> 

당신은 코드 숨김에서 그것을 찾고 있다면, 당신은 ItemListView의 SelectedItem 멤버에 액세스 할 수 있습니다 현재 선택되고있는 항목이 바인드되고있는 객체

마지막으로, 당신은 ElementName을하고 selectedItem가

<TextBlock Text="{Binding ElementName=ItemListView, Path=SelectedItem.SenderName}"/> 
를 사용하여 당신이 그것을 액세스 할 수있는 다른 컨트롤에서 컨트롤에 바인딩 할 경우
0

에 망가 모든 이해하지만, 난 당신이 사용자가 목록 상자에서 TextBlock을 선택할 수 있다는 것을 의미 생각하고,이 값을 textblock`s 먹고 싶어. 그렇게하면 당신은 단순히이 작업을 수행 할 수 있습니다

string sel = Listview1.SelectedItem.Text; 
string value = null; 
foreach (con in Stackpanel.Controls) { 
    if ((con) is Textblock) { 
     if (con.Name == sel) { 
      value = ((con)Textblock).Text; 
      break; 
     } 
    } 
}