-1

使用以下 XAML 如何<TextBlock/SenderName>根据列表视图当前选定的项目检索假设或嵌套在堆栈面板中的任何其他控件的值?在 C# 中

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

2 回答 2

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}" />

如果您希望从代码隐藏中执行此操作,您可以访问SelectedItemItemListView 的成员,该成员应该是当前所选项目绑定到的对象。

最后,如果您想从另一个控件绑定到该控件,您可以使用 ElementName 和 SelectedItem 访问它

<TextBlock Text="{Binding ElementName=ItemListView, Path=SelectedItem.SenderName}"/>
于 2012-04-22T15:31:34.037 回答
0

不明白所有,但我认为您的意思是用户可以在列表框中选择一个文本块,并且您想要获取这个文本块的值。如果是这样,您可以简单地执行以下操作:

    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; 
        }
    }
}
于 2012-04-22T15:17:14.993 回答