TextBlock文本 - 从ListView项目绑定

时间:2012-02-22 09:33:16

标签: c# wpf binding

如果ListView中的选择发生变化,如何更改TextBlock的文本? 我不想手动这样做...
ListView的所有项都是LogEntry(类)...我可以在TextBlock的Text-Attribute中使用Binding来获取所选项的特定属性吗?

2 个答案:

答案 0 :(得分:2)

是的,事实上有多种解决方案,我给你最多的“WPF”回答,但imo也是最不灵活的。

首先,您需要设置IsSynchronizedWithCurrentItem="True" property

现在,如果您选择一个项目,绑定的CollectionView会将该项目设置为CurrentItem。

现在,您的TextBox / Block可以使用'/'通过特殊的绑定语法绑定到此特定项目。 例如:

<TextBlock Text="{Binding LogEntries/}"/>

当然,您可以通过绑定来获取当前项目中的特定属性

<TextBlock Text="{Binding LogEntries/WarningMessage}"/>

希望有所帮助。

答案 1 :(得分:1)

假设您有这样的列表视图:

<ListView ItemSource="{Binding LogEntries}" Name="logs" IsSynchronizedWithCurrentItem="True">


</ListView>


<ContentControl Content="{Binding ElementName=logs, Path=SelectedItem}" ContentTemplate="{StaticResource logTemplate}"/>

现在你需要在参考资料中提供logTemplate。

<UserControl.Resources>
   <DataTemplate DataType="{x:Type local:LogEntry}">
      <TextBlock Text="{Binding Path=LogText}"/>  <-- This is a Property-Binding of your custom class
   </DataTemplate>
</UserControl.Resources>

缺少的最后一件事是为本地类LogEntry提供命名空间。如果你使用像Resharper这样的很棒的工具,它会为你插入名称空间。否则,这里有一个样本声明:

<UserControl xmlns:local="clr-namespace:My.App.Namespace.LogEntry;assembly=My.App"
 ... (rest of namespace declarations)