2012-02-22 71 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

相關問題