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