2012-02-22 115 views
0

当我的ListView中的选择更改时,如何更改TextBlock的文本?
我不想这样做手动...
ListView的所有项目是LogEntry的(类)...我可以在TextBlock的文本属性中使用绑定来获取所选项目的特定属性?TextBlock TextView中的文本绑定项

回答

2

是的,其实有多种解决方案,我给你最“WPF”之类的答案,但海事组织还最不灵活。

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

现在,如果你选择一个项目,绑定CollectionView将设置项为CURRENTITEM。

现在您的文本框/块可以通过使用'/'的特殊绑定语法绑定到此特定项目。 例如:

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

当然,你可以通过藏汉结合

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

希望帮助摆脱当前项目的特定属性。

+0

但是,当ListView的选择发生变化时,TextBox-Text必须更新...所以我需要listView的特定项目,并且为每个TextBox指定LogEntry-Item的特定属性(DependencyProperty) ... – 2012-02-22 10:19:00

+0

别担心,它的确如此。当你将一个集合绑定到一个ItemsControl时,WPF将不会直接绑定它,而是一个CollectionView绑定在控件和你的集合之间。使用IsSynchronizedWithCurrentItem,collectionview将跟踪您选择的项目。绑定到您的集合,使绑定知道CollectionView,因此每个绑定到您的集合的控件也可以访问当前项目。 – dowhilefor 2012-02-22 10:54:19

+0

确定它的工作原理:D谢谢。 – 2012-02-22 12:02:31

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) 
+0

我不知道ContentControl的功能是什么... – 2012-02-22 09:46:14

+0

对不起,它进一步... – 2012-02-22 09:46:50

+0

是的,ItemsSource是正确的。 我在内部使用ObservableCollection ,LogEntry是DependencyObject的子类... – 2012-02-22 09:49:41

相关问题